- PVSM.RU - https://www.pvsm.ru -

Краткое руководство по React JS

Статья даст вам краткий обзор того, как строятся интерфейсы с помощью React JS.
Вы можете параллельно писать код с помощью starter kit [1], или просто продолжать читать.

Концепции

React имеет небольшой API, он прост в изучении использовании. Однако, сперва давайте взглянем на несколько концепций.

Элементы — это объекты JavaScript, которые представляют HTML-элементы. Их не существуют в браузере. они описывают DOM-элементы, такие как h1, div, или section.

Компоненты — это элементы React, написаные разработчиком. Обычно это части пользовательского интерфейса, которые содержат свою структуру и функциональность. Например, такие как NavBar, LikeButton, или ImageUploader.

JSX — это техника создания элементов и компонентов React. Например, это React-элемент, написаный на JSX:

<h1>Hello<h1>

Такой же элемент может быть написан на JavaScript:

React.DOM.h1(null, 'Hello');

С JSX требуется гораздо меньше усилий, он трансформируется в JavaScript перед запуском в браузере.

Virtual DOM — это дерево React элементов на JavaScript. React отрисовывает Virtual DOM в браузере, чтоб сделать интерфейс видимым. React следит за изменениями в Virtual DOM и автоматически изменяет DOM в браузере так, чтоб он соответствовал виртуальному.

С пониманием этих концепций мы можем продолжать использовать React. Мы напишем ряд пользовательских интерфейсов, каждый из которых будет добавлять слой функциональности к предыдущему. В качестве примера, мы напишем фото-ленту на подобии Instagram.

Рендеринг

Первым делом происходит рендер виртуального элемента (элемента, или компонента React). Помните, пока виртуальный элемент содержится только в памяти JavaScript. мы должны явно сообщить React отрисовать его в браузере.

React.render(<img src='http:tinyurl.comlkevsb9' >, document.body);

Функция render принимает два аргумента: виртуальный элемент и реальный узел DOM. React берёт виртуальный элемент и добавляет его в указанный узел. Теперь изображение можно увидеть в браузере.

Компоненты

Компоненты — это душа и сердце React. Это пользовательские элементы. Обычно, они имеют свою уникальную структуру и функциональность.

var Photo = React.createClass({

  render: function() {
    return <img src='http:tinyurl.comlkevsb9' >
  }
});

React.render(<Photo >, document.body);

Функция createClass принимает объект, который реализует функцию render.
Компонент Photo создан и отрисован в теле документа.

Этот компонент делает не больше, чем строчка в предыдущем примере, но теперь его можно дополнять функциональностью.

Свойства

Под свойствами можно понимать опции компонента. Они предоставляются в качестве аргументов компонента и выглядят так же, как атрибуты HTML.

var Photo = React.createClass({

  render: function() {
    return (
      <div className='photo'>
        <img src= >
        <span>{this.props.caption}<span>
      <div>
    )
  }
});

React.render(<Photo imageURL='http:tinyurl.comlkevsb9' caption='New York!' >, document.body);

В функции render компоненту Photo переданы 2 свойства: imageURL и caption.

Внутри пользовательской функции render, свойство imageURL используется в качестве src для изображения. Свойство caption используется как текст элемента span.

Стоит отметить, что свойства компонента неизменяемы. Если у компонента есть изменяемые свойства, используйте состояние.

Состояние

Состояние — это специальный объект внутри компонента. Он хранит данные, которые могут изменятся с течением времени

var Photo = React.createClass({

  toggleLiked: function() {
    this.setState({
      liked: !this.state.liked
    });
  },

  getInitialState: function() {
    return {
      liked: false
    }
  },

  render: function() {
    var buttonClass = this.state.liked ? 'active' : '';

    return (
      <div className='photo'>
        <img src= >

        <div className='bar'>
          <button onClick={this.toggleLiked} className={buttonClass}>
            ♥
          <button>
          <span>{this.props.caption}<span>
        <div>
      <div>
    )
  }
});

React.render(<Photo src='http:tinyurl.comlkevsb9' caption='New York!'>, document.body);

Наличия состояния у объекта вносит небольшую сложность.
У компонента появляется новая фунцкия getInitialState. React вызывает её после инициализации компонента. В ней устанавливается начальное состояние (что подразумевает название функции).

Также у компонента появляется функция toggleLiked. Она с помощью функции setState, переключает состояние liked.

Внутри функции render, переменной buttonClass присваивается значение «active», либо пустая строка, в зависимости от состояния liked.

buttonClass используется, как класс кнопки элемента. У кнопки также имеется обработчик события onClick, который вызывает функцию toggleLiked.

Вот, что происходит после отрисовки компонента:

— После нажатия кнопки вызывается toggleLiked
— Изменяется состояние liked
— React перерисовывает компонент в Virtual DOM
— Новый Virtual DOM сравнивается с предыдущим
— React изолирует изменения и обновляет их в DOM браузера

В данном случае, React изменит имя класса кнопки.

Композиция

Композиция означает комбинирование меньших компонентов при формировании большего. Например, компонент Photo может быть использован внутри компонента PhotoGallery. Примерно таким образом:

var Photo = React.createClass({

  toggleLiked: function() {
    this.setState({
      liked: !this.state.liked
    });
  },

  getInitialState: function() {
    return {
      liked: false
    }
  },

  render: function() {
    var buttonClass = this.state.liked ? 'active' : '';

    return (
      <div className='photo'>
        <img src= >

        <div className='bar'>
          <button onClick={this.toggleLiked} className={buttonClass}>
            ♥
          <button>
          <span>{this.props.caption}<span>
        <div>
      <div>
    )
  }
});

var PhotoGallery = React.createClass({

  getDataFromServer: function() {
    return [{
      url: 'http:tinyurl.comlkevsb9',
      caption: 'New York!'
    },
    {
      url: 'http:tinyurl.commxkwh56',
      caption: 'Cows'
    },
    {
      url: 'http:tinyurl.comnc7jv28',
      caption: 'Scooters'
    }];
  },

  render: function() {
    var data = this.getDataFromServer();

    var photos = data.map(function(photo) {
      return <Photo src={photo.url} caption={photo.caption} >
    });

    return (
      <div className='photo-gallery'>
        {photos}
      <div>
    )
  }
});

React.render(<PhotoGallery >, document.body);

Компонент Photo остался точно таким же, как и был.

Появился новый компонент PhotoGallery, который генерирует компоненты Photo. В примере используются поддельные данные сервера, которые возвращают массив из 3 объектов с url и заголовком.

В цикле создаются 3 компонента Photo, которые затем подставляются в возвращаемое значение функции render.

Заключение

Этого вполне достаточно для того, чтоб начать строить пользовательские интерфейсы с использованием React. Более подробное описание есть в документации [2] и она крайне рекомендуется к прочтению.
В руководстве также не было деталей по настройке локального окружения. Вы можете узнать это из документации, либо использовать мой boilerplate [3].

Оригинал статьи: The React Quick Start Guide [4]

Автор: follower

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/80722

Ссылки в тексте:

[1] starter kit: https://github.com/jarsbe/react-starter-kit

[2] документации: http://facebook.github.io/react/docs/getting-started.html

[3] boilerplate: https://github.com/jarsbe/react-webpack-boilerplate

[4] The React Quick Start Guide: http://www.jackcallister.com/2015/01/05/the-react-quick-start-guide.html

[5] Источник: http://habrahabr.ru/post/248799/