кодесурса
«Реагировать

Компоненты и реквизит

script1adsense2code
script1adsense3code

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

Концептуально компоненты похожи на функции JavaScript. Они принимают произвольные входные данные (называемые «реквизит») и возвращают элементы React, описывающие то, что должно появиться на экране.

Компоненты функций и классов

Самый простой способ определить компонент - написать функцию JavaScript:

function SampleComponent(props) {
  return <h1>Hello, {props.name}</h1>;
}

Эта функция является допустимым компонентом React, потому что она принимает один? Props? (что означает свойства) аргумент объекта с данными и возвращает элемент React. Мы называем такие компоненты «функциональными компонентами» потому что они буквально функции JavaScript.

Компоненты класса определяются с использованием синтаксиса класса ES6, как показано ниже:

class SampleComponent extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

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

Рендеринг компонента

Ранее мы встречали и использовали только элементы React, представляющие теги DOM:

const element = <div />;

Однако я хотел бы, чтобы вы знали, что элементы React также могут представлять определенные пользователем компоненты:

const element = <SampleComponent name="Vitalis" />;

Когда React видит элемент, представляющий определенный пользователем компонент, он передает атрибуты JSX этому компоненту как один объект. Мы называем этот объект «реквизит».

Например, этот код отображает «Привет, Виталис» на странице:

function SayHello(props) {
  return <h1>Hello, {props.name}</h1>;
}
const element = <SayHello name="Sara" />;
ReactDOM.render(
  element,
  document.getElementById('root')
);

Примечание. Имена компонентов всегда начинаются с заглавной буквы.

React рассматривает компоненты, начинающиеся со строчных букв, как теги DOM. Например, <div /> представляет тег HTML div, но <Welcome /> представляет компонент и требует, чтобы Welcome находился в области видимости.

Компоненты

Компоненты могут ссылаться на другие компоненты в своем выводе. Это позволяет нам использовать одну и ту же абстракцию компонента для любого уровня детализации. Кнопка, форма, диалог, экран: в приложениях React все они обычно выражаются как компоненты.

Например, мы можем создать компонент приложения, который многократно отображает приветствие:

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}
function App() {
  return (
    <div>
      <Welcome name="Sara" />
      <Welcome name="Cahal" />
      <Welcome name="Edite" />
    </div>
  );
}
ReactDOM.render(
  <App />,
  document.getElementById('root')
);

Извлечение компонентов

В React рекомендуется разбивать компоненты на их наименьшую форму. Поэтому никогда не бойтесь разбивать компоненты на более мелкие компоненты.

Например, рассмотрим этот компонент Комментарий:

function Comment(props) {
  return (
    <div className="Comment">
        <div className="UserInfo"  >
          <img className="Avatar"
          src={props.author.avatarUrl}
          alt={props.author.name}
        /  >
          <div className="UserInfo-name"  >
          {props.author.name}
          </div  >
        </div  >
        <div className="Comment-text"  >
        {props.text}
        </div  >
        <div className="Comment-date"  >
        {formatDate(props.date)}
        </div  >
      </div  >
  );
}

Этот компонент выше принимает автора (объект), текст (строку) и дату (дату) в качестве реквизита и описывает комментарий на веб-сайте социальной сети.

Этот компонент может быть сложно изменить из-за всей вложенности, и также трудно повторно использовать отдельные его части.

Чтобы сделать этот компонент гибким, давайте выделим из него несколько компонентов.

Сначала мы извлечем аватарку:

function Avatar(props) {
  return (
      <img className="Avatar"
      src={props.user.avatarUrl}
      alt={props.user.name}
    />
  );
}

Аватару не нужно знать, что он отображается внутри комментария. Вот почему мы дали его опоре более общее имя: пользователь, а не автор.

Теперь мы можем немного упростить комментарий:

function Comment(props) {
  return (
      <div className="Comment"  >
        <div className="UserInfo"  >
          <Avatar user={props.author} /  >
          <div className="UserInfo-name"  >
          {props.author.name}
          </div  >
        </div  >
        <div className="Comment-text"  >
        {props.text}
        </div  >
        <div className="Comment-date"  >
        {formatDate(props.date)}
        </div  >
      </div  >
  );
}

Далее мы извлечем компонент UserInfo, который отображает аватар рядом с именем пользователя:

function UserInfo(props) {
  return (
      <div className="UserInfo"  >
        <Avatar user={props.user} /  >
        <div className="UserInfo-name"  >
        {props.user.name}
        </div  >
      </div  >
  );
}

Это позволяет нам еще больше упростить комментарий:

function Comment(props) {
  return (
      <div className="Comment"  >
        <UserInfo user={props.author} /  >
        <div className="Comment-text"  >
        {props.text}
        </div  >
        <div className="Comment-date"  >
        {formatDate(props.date)}
        </div  >
      </div  >
  );
}

Изначально извлечение компонентов может показаться грубой работой, но наличие палитры повторно используемых компонентов окупается в больших приложениях. Хорошее практическое правило заключается в том, что если часть вашего пользовательского интерфейса используется несколько раз (кнопка, панель, аватар) или достаточно сложна сама по себе (App, FeedStory, Comment), то это хороший кандидат для использования в качестве компонента многократного использования. ,

Реквизит только для чтения

Независимо от того, объявляете ли вы компонент как функцию или класс, он никогда не должен изменять свои собственные свойства. Рассмотрим эту функцию суммы:

function sum(a, b) {
  return a + b;
}

Такие функции называются «чистыми», потому что они не пытаются изменить свои входы и всегда возвращают один и тот же результат для одних и тех же входов.

Напротив, эта функция нечиста, потому что она меняет свой собственный вход:

function withdraw(account, amount) {
  account.total -= amount;
}

React довольно гибкий, но у него есть одно строгое правило:

Все компоненты React должны действовать как чистые функции по отношению к своим объектам.

Конечно, пользовательские интерфейсы приложений динамичны и со временем меняются. В следующем уроке мы представим новую концепцию «государства». Состояние позволяет компонентам React со временем изменять свои выходные данные в ответ на действия пользователя, сетевые ответы и все остальное, не нарушая этого правила.

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code