Показаны сообщения с ярлыком react. Показать все сообщения
Показаны сообщения с ярлыком react. Показать все сообщения

вторник, 29 мая 2018 г.

Сравнение React и Angular


Вы хотите знать какой из этих двух инструментов лучше подходит для разработки веб-приложений? Прочитайте эту статью для сравнения этих двух наиболее популярных фреймворков.
В мире веб-разработок, мы, разработчики должны знать о последних трендах и технологиях. Когда мы планируем начать разработку нового проекта то должны выбрать технологии и средства, которые будем использовать в немб и должны четко понимать для чего они нам нужны, и чем они лучше конкурентов.
Поэтому давайте в данной публикации посмотрим на два наиболее распространенные фреймворка Angular и React. Оба используются для разработки клиентской части веб приложений.
Что такое клиентская часть?
Разработка клиентской части это практика создания HTML, CSS и скриптов для веб сайта или веб приложения, которым пользователь может пользоваться. Есть несколько элементов, которые доступны для разработки сайта. Наиболее популярные элементы:
1.    HTML. Язык гипертекстовой разменки. Это главный элемент любого феб приложения.
2.    CSS. Каскадная таблица стилей – контролирует отображение веб приложения с точки зрения стилей.
3.    JavaScript. Язык программирования основанный на событиях, которые позволяет преобразовать статический HTML в динамический пользователский интерфейс HTML. JavaScript испольузет элементы DOM (Documents Object Model).
4.    Веб сборка. Веб сборки поддерживаются всеми современными браузерами. Они являются альтернативой процессам JavaScript для выполнения кода в веб браузерах.
Для разработки клиентской части приложений существует ряд инструментов и фреймворков, которые можно использовать. Наиболее популярными являются ReactJs и Angular. Теперь нам нужно понять как мы можем их сравнить ReactJs (библиотеку) и Angular (фреймворк).
Что такое фреймворк?
В области разработки программного обеспечения, фреймворк – это коллекция стандартизированного и готового к использованрию кода, который собственно позволяет разрабатывает требуемую функциональность более просто и быстро. В данной системе, разработчики не имеют столько свобод писать код как хочется, так как они ограничены необходимостью следовать процессу или структуре, которая поддерживается архитектурой фреймворка.
Что такое библиотека?
Библиотека это набор функций и функциональности, которые можно использовать в коде. В случае с библиотекой, разработчики имеют полную свободу проектирования и структуры системы, которая использует эту библиотеку.
Наиболее важными отличиями между библиотекой или фреймворком – это спобоб их взаимодействия с вашим кодом. Если кратко то вы сами вызываете код библиотеки, а фреймворк вызывает ваш код. По другому это называется инверсией управления.
Что такое Angular?
Angular, который часто называют AngualrJs, это один из наиболее популярных скриптовых фреймворков с открытым исходным кодом. Фреймворк базируется на исходном коде TypeScript. Это MVC фреймворк, который был создан и разработан в Google. MVC – это архитектурный паттерн, которые используется при создании веб приложений. MVC – расшифровывается как Модель Вид Контроллер.
С выпуском Angular 5, Google добавила поддержку прогрессивных веб приложений.
Что такое React?

React это библиотека JavaScript, по аналогии с jQuery для разработки пользовательского интерфейса. Библиотека состоит из трех частей – React-devtools, ReactJs.Net и React.Native. Последняя часть активно используется для создания нативный мобильных приложений.

Отличия React и Angular

REACT
ANGULAR
Работа с данными
React поддерживает односторонний байндинг
Angular всегда работает с двухсторонним байндингом.
Односторонний байндинг означает что все изменения в модели данных отобразятся на UI но не наоборот.
Двухсторонний байндинг означает что все изменения в модели данных отобразятся на UI и наоборот.
Односторонний байндинг данных всегда имеет однонаправленный поток данных.
Двухсторонний байндинг данных всегда имеет двухнаправленный поток данных.
Язык
React это библиотека JavaScript.
Angular это Framework по природе
Для разработки приложений на React мы может разработать программу на JSX который является собой гибридом JavaScript с XML дополнениями.
В случае разработки приложения на Angular, мы должны использовать TypeScript которые базируется на JavaScript.
Использование DOM (Document Object Model)
React использует виртуальный DOM.
Angular всегда использует DOM браузера
Поддержка работы с нативными приложениями
React включает в себя React Native, который всегда позволяет создать приложения для Android or iOS.
Используя фреймворк Angular, мы можем сделать гибридное мобильное приложение.
Структура приложения
React не является фреймворком MVC. Это простая библиотека для отображения.
Angular полноценный фреймворк MVC.
React не требует использовать какую то специфическую структуру приложения.
MVC паттерн Angular всегда предполагает разделение приложения на три слоя, таким образом манипулировать ими всегда  просто.


React самое идеальное средство для разработки приложений без логики или статического типа, где нету логических операций или каких то вычислений. В реальности можно сделать практически любое приложение с использованием React. Вот несколько сценариев где можно использовать React.
1.    Динамические Приложения
React всегда правильный выбор для динамических приложений благодря своему виртуальному DOM. Виртуальный DOM – это на самом деле упрощенная версия реального DOM. В случае с виртуальной версией, мы можем менять любой элемент очень быстро без необходимости перерисовыавать все содержимое. Поэтому данный метод феноменально сказывается на производительности приложения. Представте разницу в скорости отрисовки 100 элементов при изменении одного элемента, и отрисовки только одного элемента который был изменен.
2.    Одностраницчные приложения
React всегда отличное решение для одностраничных приложений потому что он способен отрисовыавть все изменения без перезагрузки всей страницы.
3.    Нативные мобильные приложения
Если мы хотим создать нативное приложение, то React Native один из самых лучших вариантов для этого. Мы можем создать приложение с использование JavaScript точно с такой же производительностью и визуализацией, как и в случае если бы использовали для этого Java или другие средства создания мобильных приложений.
В случае с Angular, мы его может использовать в следующих сценариях:
  •     Кросс-платформенные мобильные приложения

Фреймворк Angular также предоставляет замечательную поддержку мобильных приложений. Используя Angular 2 или новее, мы можем разрабатывать любой тип мобильных приложений используя Angular.
  •     Корпоративное программное обеспечение

Поскольку Angular использует принципы MVC, то он идеально подходит для корпоративных решений.
  •     Прогрессивные веб-приложения


Мы можем разработывать прогрессивные веб-приложения или гибридные мобильные приложения используя фреймворк Angular. Angular 2 вкупе с Ionic 2 – отличное средство для создания гибридных приложений. Эта комбинация инструментов может использоваться  для разработки прогрессивных веб приложений.

Мы можем разработывать прогрессивные веб-приложения или гибридные мобильные приложения используя фреймворк Angular. Angular 2 вкупе с Ionic 2 – отличное средство для создания гибридных приложений. Эта комбинация инструментов может использоваться  для разработки прогрессивных веб приложений.


четверг, 16 марта 2017 г.

Быстро с React: Как работать в React с формами.



Эта публикация описывает способы работы с текстом и прочими элементами ввода данных, такие как textarea или options. Умение работать с этими элементами является первостепенными навыками в веб программировании, потому что они позволяют вашему приложению получать данные ( например текст) и действия (например клик) от пользователей.
Исходный код к примерам из статьи находится в директории ch07 репозитория GitHub azat-co/react-quickly. Некоторые примеры можно найти по адресу http://reactquickly.co/demos.

Рекомендуемый способ работы с формами в React


В обычном HTML, когда мы работаем с элементами input, DOM страницы хранит значения этих элементов в узле DOM. И можно добраться до этого значения элемента с помощью метода document.getElementById('email').value или используя соответсвующие методы JQuery. DOM – это наше хранилище.
В React когда работаем с формами или другими элементами ввода, такие как отдельные текстовые поля или кнопки, у разработчиков появляется интересная пробелма которую необходимо решить. Из документации React: «Компоненты React должны представлять состояние отображения в любой момент времени, а не только в момент инициализации.» React позволяет использовать декларативнй стиль для описания UI. React описывает UI, его конечное состояние, и как он должен выглядеть.
Вы можете увидеть проблему? В традиционном HTML элементы формы, состояние элементов будут изменяться в процессе ввода данных пользователем. React использует декларативный подход к описанию UI. Элементы вводы должны быть динамичными для того что бы правильно отображать состояние.
Если разработчик планирует НЕ поддерживать состояние компонентов (в JavaScript) и не синхронизировать их с отображением, то появляется проблема: это может привести к ситуации, когда внутренне состояние и отображение отличаются. React не будет знать об этих изменениях.И это может привести к проблемам различного рода и смягчить простую философию React. Самый лучший способ заключается в том, что бы держать метод render() React’а как можно ближе к реальному DOM, и это включает и значения элементов ввода.
Давайте рассмотрим пример с текстовым полем. React должен включить новое значение в свой render() для данного компонента. Поэтому мы должны установить значение для элемента испольуя свойство value. Если мы реализуем поле <input> так как мы всегда делаем в HTML, React будет использовать render() для синхронизации с реальным DOM. React не позволит изменить это значение. Попробуйте сами. Это своидт меня с ума, но это нормальное поведение React!
render() {
  return <input type="text" name="title" value="Mr." />
}

Данный код представляет отображение в любом состоянии, и значение всегда будет «Mr.». Для элементов ввода мы должны изменить вывод в соответствие с требованиями пользователя. Таким образом, давайте сделаем значение динамическим.
Это реализация получше, потому что она обновляется из состояния:
render() {
  return <input type="text" name="title" value={this.state.title} />
}

А что такие значние состояния? React ничего не знает о пользовательском вводе в элементах формы. Разработчики должны реализовать обработчик сообщений для получения изменений в onChange.
handleChange(event) {
  this.setState({title: event.target.value})
}
render() {
  return &ltinput type="text" name="title" value={this.state.title} onChange={this.handleChange.bind(this)}/>
}

Имея это, лучшим способом для разработчика будет реализация следующих вещей для синхронизации с внутренним состоянием отображения (Изображение 1):
1.      Объявляем элементы в render()используя значения   из состояния.
2.      Обработка изменений элементов формы используя onChange()  по мере возникновения
3.      Обновление внутреннего состояния в обработчике
4.      Новые значения сохранены в состоянии и после этого отображение обновляется с помощью нового render()

 

Изображение 1: Обработка изменений и обновление состояний


На первый взгляд может показаться что это потребует много работы, но я надеюсь, что используя React больше, вы примете данный подход. Я его называю односторонняя привязка, потому что только состояние изменяет отображение. Здесь нет пути назад, только одностороннее направление от состояния к отображению. С односторонней привязкой, библиотека не обновит состояние или модель автоматически. Одним из преимуществ данного подхода является то что в этом случае нету сложности при работе с большимим количеством отображений, когда можно обновить множество состояний отдельно (модель данных)  и наоборот. Изображение 2.
Проще – не всегда значит меньше кода.Иногда, как в даном случае, разработчик должен писать дополнительный код, который вручную устанавливает данные из обработчиков событий (которые рендерятся в отображении), но этот подход становится приоритетным, когда приходится работать со сложным пользовательским интерфейсом и одностраничными приложениями с несчетным множеством отображений и состояний. Короче говоря: просто – не всегда легко.
 


Изображение 2: Односторонняя и двухсторонняя привязка


Наоборот, двухсторонняя привязка позволяет представлениям изменять состояние автоматически без явной реализации такой логики разработчиком. Двухсторонняя привязка реализована в Angular 1. Интересно, что Angular 2 позаимствовал принцип односторонней привязки у React и сделал ее привязкой по умолчанию (вы по прежнему можете явно указать необходимость использования двухсторонней привязки).
По этой причине, мы рассмотрим рекомендуемый подход работы с формами. Он называется контролируемые компоненты и гарантирует синхронизацию состяние внутреннего компонента с представлением.Альтернативный подход – неконтроллируемый компонент.
Таким образом мы изучили самый лучший вариант работы с полями ввода в React, который заключается в том, что бы перехватить изменения и применить их к состоянию как показанио на изображении 1 (ввод в измененное представление). Теперь давайте посмотрим как мы объявляем форму и ее элементы.

Определение формы и ее собыйтий в React

Мы начнем с элемента &lt;form&gt;. Разумеется, мы не хотим что бы элементы ввода размещались в DOM случайным образом. Если у нас будет несколько функциональных набороввходных данных, это может плохор закончится. Вместо этого мы обернем элементы ввода которые используются вместе с помощью элемента &lt;form&gt; &lt;/form&gt;.
Оборачивать в &lt;form&gt; необязательно. Можно использовать элементы по отдельности в простом случае. В более сложных сценариях разработчики могут группировать подобным образом элементы на одной странице. В таких случаях разумно использовать &lt;form&gt; для группировки. React из своей  &lt;form&gt; генерирует &lt;form&gt; HTML, и точно также со всеми всеми остальными элементами. В соответствии со спецификацией HTML разработчики не должны использовать формы вложенные одна в одну.
Элементы формы сами по себе могут иметь события. React поддерживает три события формы в дополнению к стандатрным событиям React:
·         onChange: срабатывает когда происходят изменения в каком либо элементе формы.
·         onInput:  срабатывает на каждом изменении значения textarea или input. Команда React не рекомендует использовать данное событие (смотрите ниже)
·         onSubmit: срабатывает при сабмите формы, как правило при нажатии на Enter

onChange vs. onInput

Событие  React onChange срабатывает на каждое изменение, в отличие от такого же события DOM, которое может срабатывать не на каждое изменение, а только при потере фокуса. Например для &lt;input type="text"&gt;  пользователь может печатать без onChange и только после того как перейдет к другому контролу, onChange будет инициирован со стороны HTML (стандартное событие браузера).  Как сказано ранее, в React, onChange срабатывает на каждое нажатие клавиши, а не только на потерю фокуса.
С другой стороны, onInput в React – это обертка над аналогом из DOM, который срабатывает на каждое изменение. Команда React рекомендует использовать onChange вместо onInput.
В конце концов onChange React работает иначе чем onChange в HTML, это выражается большим постоянством (похоже на onInput из HTML). onChange срабатывает на каждое изменение а не только при потере фокуса.
Рекомендуемый подход в React состоит в использовании onChange, а onInput только если вы хотите получить доступ к нативному поведению элемента управления. Причиной является то, что обертка onChange от React предоставляет гибкость.
В дополнение к трем событиям которые были описаны выше, &lt;form&gt; может содержать стандартные события React, такие как onKeyUp или onClick.   Использование событий формы может быть удобно если вам к примеру требуется получить какое то конкретное событые для всей формы. (группы элементов ввода).
Например, хорошим решением будет разрешить пользователям отсылать данные на сервер по нажатию на Enter (если предположить что вы не используете textarea, где такое поведение неприменимо, так как нажатие на ввод должно приводить к переходу на следующую строку). Вы можете прослушивать событие сабмита с помощью создания прослушивателя события который запускается с помощью this.handleSubmit().
handleSubmit(event) {
  ...
}
render() {
  <form onSubmit={this.handleSubmit}>
    <input type="text" name="email" />
  </form>
}

Обратите внимание: Мы должны реализовать функцию handleSubmit за пределами render(), как бы мы сделали с любым другим событием. В React нету никаких требований к праилам именования, поэтому вы можете называть ваши обработчики событий как вам нравится, оставляя названия тем не менее понятными и логичными. Сейчас, мы обратимся к наиболее популярной нотации и добавим префикс к обработчику событий – добавим слово “handle”, которое будет отличать его от прочихобычных методов класса.
Напомню, не вызывайте метод (не добавляйте скобки) и не используйте двойные кавычки вокруг фигурных скобок (правильный вариант: EVENT={this.METHOD}) когда задаете метод обработчика. Я знаю что для некоторых читателей это все основы JavaScript и очевидно, но вы не поверите, сколько раз я видел ошибки связанные с этими моментами в коде React: мы передаем объявление функции, не ее результат и мы используем фигурные скобки как значение для JSX аттрибута.
Другой способ реализации подписки на Enter – это вручную прослушивать событие нажатия на клавишу (onKeyUp) и проверка кода нажатой клавиши (13 для Enter).
handleKeyUp(event) {
  if (event.keyCode == 13) return this.sendData()
}
render() {
  return <form onKeyUp={this.handleKeyUp}>
  ...
  </form>
}

Обратите внимание что метод sendData реализован где то еще в коде. Также мы должны вызвать bind(this) для обработчика в constructor().
Сумируя все сказанное, мы можем иметь события для элементов формы, а не только для отдельных элементов в форме.

Источник: https://www.sitepoint.com/work-with-forms-in-react/