Автор оригинала: Samer Buna.
Функция Rection и компоненты класса, реквизиты, состояние и обработчики событий
Самая важная концепция для понимания в Rect.js является компонентом. Актуальный компонент может быть одним из двух типов. Это может быть либо Функция компонент или Класс составная часть. Иногда вы услышите разные условия, чтобы описать эти два типа, как без гражданства и государственная Отказ Функциональные компоненты также часто связаны с презентационный концепция. Я буду ссылаться на них в этой статье как функциональные компоненты и компоненты класса.
Функциональный компонент это самая простая форма реагирования компонента. Это простой функция с простым контрактом:
Функциональный компонент получает объект свойств, который обычно называется реквизит. Он возвращает, что выглядит как HTML, но действительно является специальным синтаксисом JavaScript под названием Jsx. .
А Компонент класса это более популярный способ определить реактивный компонент. Он также действует как функция, которая принимает реквизиты, но эта функция также рассматривает частное внутреннее состояние как дополнительный вход, который контролирует возвращенный JSX.
Это частное внутреннее состояние – это то, что дает реагировать его реактивный природа. При изменении состояния классов компонент изменяется, отреагируйте, что восстановите этот компонент в браузере.
Объекты состояния и реквизитов имеют одно важное различие. Внутри компонента класса объект состояния может быть изменен, пока объект реквизита представляет фиксированные значения. Компоненты класса могут изменить только свое внутреннее состояние, а не их свойства. Это основная идея, чтобы понять в реакции, и эта статья будет иметь пример этого.
Давайте посмотрим на фактический пример компонента. Очень простой, без какого-либо ввода и простым H1 в оформлении Div выход.
С левой стороны компонент написан в специальном синтаксисе JSX.
JSX позволяет нам описать наши пользовательские интерфейсы (UIS) в синтаксисе, очень близко к HTML, к которому мы привыкли. Это, однако, необязательно. Реагирование можно использовать без JSX, так как вы можете видеть на правой стороне. На самом деле, React просто компилирует JSX, вы видите слева на чистый JavaScript, который вы видите справа. Затем он работает с скомпилированным JavaScript в браузере.
Rect.Createelement Вызов на правой стороне – это представление JavaScript в области объекта документа ( DOM ). Реагируйте эффективно переводят его в операции DOM, которые он выполняет в браузере.
Давайте напишем реактивный компонент.
Я буду использовать jscomplete’s React Playground Для примеров в этой статье. Это инструмент, в котором вы можете проверить свой JavaScript и React Code прямо в браузере. Нет необходимости устанавливать или настроить что угодно.
У инструмента есть простые два панели интерфейса. Левая панель – это редактор, который вы пишете свой JavaScript и React Code. Последняя версия реагирования и реагирования и реагирования уже загружена там. Редактор также понимает расширение JSX и все современные функции в JavaScript. Это позволит нам сосредоточиться на самом aDe API, а не настроить и составление приложения React.
Правая панель представляет собой панель предварительного просмотра. У вас есть заранее определенный Mountnode элемент в редакторе. Когда вы выполняете свой код JavaScript, все, что вы ввели в Mountnode Элемент отображается на панели предварительного просмотра. Панель предварительного просмотра также покажет любые ошибки, которые вы столкнулись, когда вы выполняете свой код. Детская площадка также простой JavaScript Реп (RUN, EVAL, PRINT, LOOP), где вы можете проверить быстрые функции и выражения и выражений JavaScript. Для выполнения кода в любое время нажмите Ctrl + Enter Отказ
Попробуйте следующее в REPL, например:
mountNode.innerHTML = 'Hello!!';
Или Простой режим записи
3 == '3'
Чтобы создать реактивный компонент, определите новую функцию. Давайте сделаем эту функцию вернуть элемент кнопки HTML:
function Button() { return ( );}То, что мы вернулись здесь, выглядит как HTML, но помните, что это не так. Он будет скомпилирован в JavaScript. Фактический JavaScript, который видит браузер, когда мы используем этот элемент кнопки в JSX, это вызов Отреагировать Функция:
function Button() { return ( React.createElement("button", null, "Go") );}Хотя вы можете использовать реакцию таким образом без JSX, было бы намного сложнее кодировать и поддерживать. Итак, давайте придерживаемся JSX.
Вышеуказанная функция является полным и очень простым реагированным компонентом. Давайте использовать это!
Мы используем компонент, установив его в браузере. Функция, предназначенная для этого Reactom.runder , который принимает в два аргумента:
- Первый – это компонент для рендеров, в нашем случае это
КнопкаОтказ - Второй аргумент является элементом, в котором этот компонент должен быть отображен. В среде REF мы можем использовать специальные
MountnodeПеременная.
ReactDOM.render(, mountNode);
Все примеры кода в этой статье имеют ссылку на кнопке скриншота, где вы можете редактировать пример на jscomplete reft.
Компонент функции RECHACT получает в качестве первого аргумента реквизит объект. Этот аргумент позволяет сделать компонент повторно использовать. Например, вместо жесткокодирования метки «Go» на кнопке выше, мы можем пройти Кнопка Компонент A . этикетка Атрибут, как мы делаем с регулярными элементами HTML:
ReactDOM.render(, mountNode);
Тогда мы можем получить доступ к этому атрибуту внутри компонента с фигурным кронштейном для ropps.label Отказ
function Button(props) { return ( );} реквизит Аргумент – это объект, который содержит все значения, которые были переданы на компонент, когда он был отображен.
Сделать компонент интерактивный
У нас есть элемент кнопки, и он отображается через комментарий реагирования.
Давайте теперь добавим некоторую интерактивность к этому так дальному раствору. Давайте сделаем этот элемент кнопки увеличивать значение счетчика во всех кликах и отобразить это значение в качестве маркировки кнопки. Таким образом, этикетка этой кнопки начинается с номера 1, и когда пользователь нажимает кнопку, его метка изменится на 2, 3, 4 и т. Д.
Поскольку это что-то, что нужно отражено в результате оказанного компонента, он принадлежит состоянию компонента. Нам нужен компонент, чтобы перенаправить себя каждый раз, когда счетчик изменений. Мы не можем использовать недвижимость здесь, потому что компонент не может быть изменен. Используя объект специального состояния Rection, мы будем использовать React’s реактивный природа И нам не нужно будет беспокоиться о Как принять изменения в браузер. Реагировать сделает это для нас.
Но наша кнопка компонент в настоящее время является функциональным компонентом. Функциональные компоненты не могут иметь состояние, поэтому нам нужно сначала обновить этот компонент в компоненте класса.
Это очень просто. Сначала мы определяем класс, который расширяется Реагировать. Составная часть
class Button extends React.Component { }В этом классе мы определяем оказывать Функция, которая возвращает jsx компонента; Кнопка HTML в нашем случае.
render() { return ( );}Это немного больше кода, но теперь мы можем использовать частное состояние на компонент кнопки!
Чтобы использовать объект состояния, который нам сначала нужно инициализировать его. Государственный объект – это простое свойство экземпляра, поэтому мы можем инициализировать его внутри конструкторной функции Кнопка класс. Мы просто определяем нормальную функцию конструктора (которая получает реквизит объект в реакции) и вызов супер Метод для чтения наследования компонента.
constructor(props) { super(props); this.state = { counter: 1 };}После этого мы инициализируем Это к тому, что мы хотим. Ключи этого состояния объекта являются различными элементами государства. Для нашего дела нам нужен счетчик Состояние, которое начинается с 1.
Внутри функции Render, поскольку мы можем написать любое выражение JavaScript в фигурных скобках, мы можем прочитать значение нового счетчик элемент состояния, который мы инициализировали в штате, используя this.state.counter Отказ
render() { return ( );}Ключевое слово « это » относится к экземпляру компонентов, мы передаем Реагировать Отказ
Вы можете попробовать изменить это счетчик счетчика, чтобы увидеть, как кнопка будет отображать значения, которые вы помещаете в состояние.
Существует еще один более короткий синтаксис для определения начального состояния, который должен просто использовать свойство класса без вызова конструктора:
class Button extends React.Component { state = { counter: 1 }; render() { return ( ); }}Это еще не частью официального языка JavaScript, но он скоро будет. Синтаксис работает на JSComplele Repling Playground, потому что этот инструмент использует Babel, чтобы траншировать его в поддерживаемый JavaScript, который будет поймена в браузере.
Когда вы настраиваете свое собственное приложение React Apply, вам придется вообще использовать что-то вроде Babel, чтобы скомпилировать JSX в JavaScript. Это простой выигрыш также включает и использовать функции JavaScript, которые находятся хорошо, чтобы стать официальной частью языка.
В Кнопка Пример до сих пор у нас есть объект состояния и элемент кнопки HTML, который отображает значение счетчика, которое мы инициализировали в состоянии. Теперь нам нужно изменить это значение, когда мы нажимаем кнопку. Нам нужно определить обработчик щелчка на этой кнопке.
Реакция поставляется с нормамированными событиями, которые легко использовать. Для этого нам нужны OnClick Событие, которое мы определяем на сам элемент HTML-кнопки:
function F() {}В отличие от обработчиков событий DOM, которые используют строку, обработчики событий RACT используют фактическую функцию JavaScript. Эта функция может быть глобальной (например, F выше) или встроенная функция:
Однако стандартная практика состоит в том, чтобы определить функцию на сам компонент класса. Давайте назовем это Handleclick И мы можем определить его на компоненте как свойство экземпляра:
class Button extends React.Component { state = { counter: 1 }; handleClick = () => { console.log('Button is clicked!!'); }; render() { return ( ); }}Мы используем синтаксис полевого класса Class, который позволяет использовать функции стрелки, которые связаны с экземпляром компонента. Handleclick Теперь выступают в качестве функции прототипа на этом классе. Внутри Handleclick Ключевое слово « это » относится к экземпляру компонента, который мы монтируемся в доме.
Handleclick Работа проста: прочитайте текущее значение счетчика из состояния объекта, используя this.state.counter Отказ Затем увеличивайте это значение и обновите состояние компонента с новым увеличенным значением.
Мы можем использовать встроенный React SetState Метод, который доступен на каждом экземпляре компонента класса, для обновления состояния компонента.
Кнопка теперь будет увеличивать свой ярлык на каждом клике.
Это было просто и мощно! Мы определили обработчик событий для OnClick метод. Каждый раз, когда пользователь нажимает кнопку Handleclick Функция будет выполнена. Функция читает текущее состояние счетчика счетчика, увеличивает его, а затем устанавливает состояние на новое увеличение значения. Реагистрация заботится обо всех рендеринге, необходимых после этих изменений, поэтому вам не нужно беспокоиться об этом.
Обратите внимание, что мы не обновили объект штата напрямую. Мы должны использовать React’s setstate. Метод, когда мы хотим обновить любой элемент в состоянии. Вы не можете, например, сделать это:
// WRONG:this.state.counter = this.state.counter + 1;
Рейкт SetState Метод представляет собой асинхронный, который расплачивается обновление. Несколько SetState Звонки могут быть потенциально наполнены для производительности. Поскольку мы оба читаем, и пишу в государственный объект внутри Handleclick Функция, мы могли бы поразить состояние гонки. Общее правило, когда вам нужно обновить состояние, используя значение из текущего состояния, используйте другой договор о SetState метод. Это получает ссылку на функцию вместо объекта в качестве первого аргумента:
this.setState((prevState) => {});Эта функция получает предвещать Объект, который мы можем уверенно использовать, не беспокоясь о гоночных условиях. Функция возвращает объект, который мы хотим реагировать на использование для установки состояния. Наше счетчик Значение Пример выше становится:
this.setState((prevState) => ({ counter: prevState.counter + 1 }));Вам нужно только использовать этот второй синтаксис SetState Если ваше обновление зависит от текущего состояния. Тем не менее, это может быть хорошая идея, чтобы привык всегда использовать вторым синтаксисом функции-аргумента.
Вот окончательный код:
class Button extends React.Component { state = { counter: 1 }; handleClick = () => { this.setState((prevState) => ({ counter: prevState.counter + 1 })); }; render() { return ( ); }}ReactDOM.render(, mountNode);
Проверьте его И если у вас есть какие-либо вопросы, дайте мне знать в комментариях ниже.
Изучение реагировать или узел? Оформить заказ моих книг:
Оригинал: “https://www.freecodecamp.org/news/how-to-write-your-first-react-js-component-d728d759cabc/”