Реагировать отличается Во многих отношениях от его предшественников передней стороны! Настолько так, чтобы оно вызвало ренессанс в переднем и развитии пользовательского интерфейса в целом. Смотри Преобразование , Inferno , RAX чтобы назвать только несколько. Кроме того, он также вошел в местное развитие UI с Реагировать родной А теперь для пользовательских интерфейсов в VR с Реагировать VR Отказ
Реагирование становится все более стандартной целью рендеринга для различных платформ – Web, Mobile Native, OS родных и других. Люди нацеливаются на реагирование и принятие его в нескольких платформах – хороший пример этого – React Sketchapp , что позволяет реагировать компоненты для отображения в эскизе. Мы только что поцарапали поверхность того, что возможно с реагированием и возможностями, которые она приносит для развития пользовательского интерфейса в целом.
Это не о библиотеке Ract
Речь идет о реактивный образ мышления. Мы получили использованные для отображения пользовательского интерфейса, затем мутируя его обновлять и показывать последние изменения. То, что реагирует очень хорошо, должен был принести неизменяемый UIS в массы – вы никогда не «мутируете» интернет-интерфейс – вы всегда (Re-) визуалите! Всегда запустите ту же функцию, которая использовалась для начального рендеринга, чтобы получить обновленный интерфейс. Это приводит нас к основному пункту реагированного способа мышления.
Дело не в реакции – библиотека. Речь идет о реактивный образ мышления.
Речь идет о декларативном УИ
Основной точкой реагирования состоит в том, что оно освобождает вас от того, чтобы подумать, как вы переходите на ваш интерфейс из государства в штате B. Это может не выглядеть как большую сделку, но, как только у вас также будет государство C и штата D и государства E и так Вкл. И приходится явно программировать, как вы переходите из всех этих государств, вы начинаете реализовывать силу реагировать декларативный способ описания УВИ (и насколько сложно поддерживать императивные UIS).
Давайте посмотрим на быстрый пример с ванильными JS, а затем с реагированием. Скажем, у нас есть электронный вклад; Когда нет значения, оно должно показать предупреждение, когда есть недопустимое электронное письмо, оно должно показать ошибку, а когда она содержит допустимый адрес электронной почты, он должен скрыть все сообщения.
var emailInput = document.querySelector('.email input'); var messageDiv = document.querySelector('.email message'); emailInput.addEventListener('change', function(e){ var value = e.target.value; var valid = isEmail(value); if (valid){ messageDiv.removeClass('invalid'); messageDiv.removeClass('warning'); messageDiv.addClass('valid'); } // ... handle is empty // ... })
Это уже выглядит сложно. В то время как в реакции все, что мы делаем, это
class extends React.Component { render(){ returnthis.onChange(e)} />} onChange(e) { const value = e.targe.value; this.setState({ cls: isEmail(value)? 'valid': value ? 'invalid': 'warning' }) } }
Состояние состояния со временем является корнем большинства ошибок UI и это где Реагируйте действительно сияют Отказ Это освобождает разработчику, чтобы думать о государственных переходах. Концептуально ваш пользовательский интерфейс пересматривается с нуля, поэтому нет необходимости делать мутации вручную.
Концептуально, вы можете подумать о реагировании как повторное рендеринг всего пользовательского интерфейса с нуля – на каждом изменении.
Малая поверхность API
С приведенным выше примером мы охватывали большинство публичных API на реагирование. Красота все это такое маленькая из API React представляет – это почти слишком просто, чтобы быть правдой. И все же Рендер метод , компонент реквизит и Состояние компонента Наиболее важными вещами в приложении React App – становление хорошего понимания на них проложены путь к продуктивному использованию реагирования в коммерческих приложениях.
В моих более 10 лет опыта я никогда не нашел другого способа написать UIS так быстро и мощно.
Конечно, Tech развивается естественным образом и становится все лучше с течением времени, но прыжок, который предложил реагирование, является огромным скачком вперед. Большинство идей не новы, они были в течение некоторое время, но отреагировали успешно принести эти очень хорошие идеи в когерентную библиотеку с четкой API и небольшим целенаправленным целей: только построить пользовательские интерфейсы. Никаких данных не вытесняет, без пользовательских моделей, без принудительной структуры приложения и т. Д. Несмотря на то, что все эти вещи имеют свое место в разработке пользовательского интерфейса и ценные, React Wantion Doad, чтобы сделать только одно действительно хорошо: построить UIS. Вот и все.
Реагирование было написано только с одной целью: опишите и построить UIS как можно более естественно.
На компонентных реквизитах и состоянии
Состояние компонентов и компонент – это основные концепции в реакции:
- Пропры компонента передаются в компонент компонента владельца. Предпочтывание компонентов следует рассматривать как неизменные, поэтому они должны быть используется как только для чтения сам компонент.
- Состояние компонента хранится внутри компонента и управляется только самим компонентом. Как лучшая практика, это также хорошо, если вы относитесь к состоянию компонента как неизменную (хотя это не), и когда вам нужно обновить состояние, убедитесь, что вы предоставляете новую ссылку для каждого свойства в состоянии.
class ContactInfo extends React.Component { constructor(props) { super(props) this.state = { address: { city: 'New York', street: 'Chrown Str' } } } onStreetChange(city) { this.setState({ address: { city, street: this.state.street } }) } onStreetChange(street) { this.setState({ address: { street, city: this.state.city } }) } render() { return} } const App = (props) => { return{this.props.contactName}
this.onCityChange(e.target.value)} value={this.state.address.city} /> this.onStreetChange(e.target.value)} value={this.state.address.street} />{/* The ContactInfo components receives a props object like { contactName: "Richard" } */}} ReactDOM.render(, document.querySelector('#main') )
В приведенном выше примере обратите внимание, как состояние обновляется с новым Адрес Объект на каждом изменении – это позволяет избежать пропуска обновлений, когда Rect.Purecomponent
Используется – это просто компонент реагирования, который только повторно отображает, когда он получает новые значения для реквизит и для состояния (он неглубоко сравнивает старые и новые объекты реквизит и старые и новые государственные объекты).
Кроме того, Rect поддерживает функциональные компоненты, которые не могут иметь состояние и называются соответствующими реквизит объект.
Понимание реквизит и состояние имеет решающее значение для того, чтобы быть продуктивным с реагированными.
Управляемые компоненты
Еще одна мощная концепция в Adction Apps – контролируемые реквизиты – в основном означает компоненты не хранить промежуточное состояние для контролируемых реквирей (например, при обновлении значения внутри ввода текста), а скорее на каждом изменении, они уведомляют компонент владельца изменения, поэтому владелец может повторно Визуализируйте контролируемый компонент с обновленными значениями для реквизитов.
// controlled input // uncontrolled input
Вышеуказанные входы являются примером контролируемых компонентов (уже запеченных в реакцию), но в основном это основной сигнал: неконтролируемые компоненты используют свое внутреннее состояние для обновления их UI, в то время как контролируемые компоненты всегда показывают значения из реквизитов. В результате, когда компоненты владельца решают не перезаписать контролируемый компонент, даже если пользователь может взаимодействовать с компонентом (например, текстовым входом), ничего не произойдет, и не будет никаких изменений в пользовательском интерфейсе.
Универсальная платформа
Как только вы получите похвалу в реакцию и реактивный способ мышления в УВ, вы вдруг осознаете все эти знания могут быть применены к UIS повсюду, а не только в Интернете. И красота из них заключается в том, что во время того времени вы можете стать продуктивным в строительстве родных рабочих пользовательских систем для мобильных или настольных операционных систем, или даже для WebVR, теперь, когда реагирование становится широко принятым, с библиотеками, написанными на целевых платформах, но с одним Общий способ мышления на УВ – декларативный и компонентный.
В то время как старый лозунг Java «пишут один раз, запустите везде», не подходит для пользовательских интерфейсов приложений, написанных в Java, реагировать новый подход «Узнать один раз, писать где-нибудь», действительно продуктивно и изменяется в жизнь.
Реагирование предлагает истинно «Узнайте один раз, напишите где-нибудь»!
Я хотел бы услышать, как вы взяли реагировать! Сколько времени понадобилось, чтобы вы были знакомы с этим? А как насчет производительности, как только вы его схватили?