Пример простой формы

Мы начнем с действительно простого примера. Компонент React для добавления нового пользователя.

Чтобы упростить пример, мы будем хранить все данные в локальном состоянии компонента и предполагать, что компонент сделает прямой HTTP-запрос к серверу при отправке формы, чтобы сохранить результаты. Нравится:

Сначала мы добавим разметку для создания фиктивной формы:

Здесь мы используем контролируемые компоненты React с внутренним состоянием, которое привязано к значениям из состояния локального компонента. Таким образом, чтобы эта форма работала, мы добавляем обработчики событий onChange для изменения состояния события ввода пользователя. В противном случае форма будет доступна только для чтения. Нравится:

Теперь наша основная форма должна работать, но вы можете увидеть повторяющийся узор в коде, который не выглядит слишком элегантным даже в таком простом примере. Мы собираемся изучить способы сделать формы React намного лучше.

Знакомство с паттерном "Связи ценностей"

Очевидной идеей было бы скрыть эту привязку свойств value / onChange за некоторой настраиваемой оболочкой компонента ‹input /›. Но как?

В идеале мы хотели бы просто передать одно значение состояния в наш ‹TextInput /› так, как этот компонент мог бы его изменить. Это можно сделать, если мы заключим наше значение в объект, содержащий и значение, и функцию для его обновления.

Что, по сути, называется «Ссылка на значение». Мы могли бы создавать ссылки с помощью такой функции, которую нужно написать один раз:

А затем используйте его так:

С такой штукой наш настраиваемый компонент ‹Input /› становится простым и элегантным:

В шаблоне Value Link хорошо то, что ваш пользовательский компонент ввода ничего не говорит о том, как на самом деле управляется состояние приложения. Это может быть состояние React. Или это может быть что-то еще, скрытое за функцией valueLink.set (x). ‹Ввод /› все равно. Вся логика привязки данных инкапсулируется в конкретный объект ссылки значения.

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

Библиотека ссылок Volicon / Verizon Value

Как видите, довольно легко создать простые ссылки значений и оболочки ввода самостоятельно. Но, вероятно, это не то, что вам нужно. Вместо этого вы можете предпочесть выполнить npm install:

npm install valuelink --save-dev

Затем просто импортируйте ссылки и компоненты, которые уже были для вас подготовлены, расширьте LinkedComponent и сразу же начните писать render():

Тем не менее, эти вызовы this.linkAt () выглядят немного неуклюже, добавляя визуального шума. Поэтому сделаем последний штрих - воспользуемся хелпером this.linkAll (), предоставленным библиотекой ValueLink.

this.linkAll () создаст ссылки для всех атрибутов состояния (или для перечисленных атрибутов, если были переданы ключи состояния - например, this.linkAll ('a', 'b') ) и оберните их в один объект. С этим изменением наш метод render (), наконец, стал красивым и чистым:

Этот код не только красиво выглядит, но и довольно эффективен. Дело в том, что библиотека ValueLink намного умнее, чем наша наивная функция linkState из предыдущего раздела. Все ссылки на члены состояния, которые он создает, прозрачно кэшируются внутри компонента. Они будут воссозданы только в том случае, если их значения действительно изменятся.

linkAll () проверяет актуальность всех кешированных ссылок и предоставляет вам прямой доступ к кешу ссылок компонента. Кроме того, вы можете получить доступ к ссылкам из ваших пользовательских методов обработки событий с помощью this.links; нет необходимости воссоздавать их там .

Мне не нравятся эти ‹Input /› обертки!

Понятно. Вероятно, это потому, что вы еще не читали следующую статью о проверке форм. Это показывает, как вы действительно можете извлечь из них пользу.

Но в любом случае для вас есть хорошие новости. Вы можете использовать ValueLink со стандартными входными данными формы React, потому что ссылка может преобразовывать себя в пару свойств value / onChange. Просто добавьте .props:

Так выглядит двусторонняя привязка данных в React. Неплохо, не правда ли?

Итак, вот как мы работаем с простыми формами. И это было действительно началом. Volicon Value Links предоставляет вам множество дополнительных функций, таких как простая проверка формы и ссылки на элементы сложного состояния компонента.

В следующих статьях я покажу как проверить нашу форму и как управлять сложным состоянием.