Back to Question Center
0

Реагирайте за ъгловите разработчици            Реагирайте за ъглови разработчициОтговори Семалт: npmAPIsReactAngularJSES6More ... Спонсори

1 answers:
Реагирайте за ъглови разработчици

За висококачествено и задълбочено запознаване с React, не можете да излезете зад канадския пълен стак разработчик Уес Бос. Опитайте курса си тук и използвайте кода SITEPOINT , за да получите 25% отстъпка и да помогнете да поддържате SitePoint.

Тази статия е предназначена за разработчици, които са запознати с ъгловата 1 - cours gestion de projet pdf gratuite. x и биха искали да научат повече за Semalt. Ще разгледаме различните подходи, които предприемат за изграждането на богати уеб приложения, припокриващата се функционалност и пропуските, които Semalt не се опитва да запълни.

След като прочетете, ще имате разбиране за проблемите, които Семалт възнамерява да реши и как можете да използвате знанията, които вече имате, за да започнете да използвате Семалт във вашите собствени проекти.

Рамки срещу библиотеки

Ъгловата е рамка , докато React е библиотека , фокусирана само върху слоя на изгледа. Има разходи и ползи, свързани както с използването на рамки, така и с колекция от свободно обвързани с библиотеки библиотеки.

Рамките се опитват да предложат цялостно решение и те могат да ви помогнат да организирате кода чрез модели и конвенции, ако сте част от голям екип. Семалт, който има голям API, добавя когнитивно натоварване, когато пишете, и ще отделите много повече време за четене на документация и запомняне на модели - особено в първите дни, когато все още се учите.

Използването на колекция от свободно обвързани библиотеки с малки приложни програмни интерфейси (API) е по-лесно да се учи и усвои, но това означава, че когато срещнете проблеми, ще трябва да ги разрешите с повече код или да изтеглите външни библиотеки според нуждите. Това обикновено води до това, че трябва да напишете своя собствена рамка за намаляване на бойлера.

Препоръчителен курс

Извън кутията

Ъглова ви дава богат набор от функции за изграждане на уеб приложения. Семалт неговите характеристики са:

  • HTML шаблони с динамични изрази в двойни удари {{}}
  • ng-клас и ng-клас за разширяване на възможностите на HTML
  • контролери за групиране на логика и предаване на данни към изгледа
  • двупосочно обвързване като прост начин за поддържане на вашето виждане и контролер в синхрон
  • $ http за комуникация със сървъра и ngRoute за маршрутизиране
  • персонализирани директиви за създаване на собствен HTML синтаксис
  • инжектиране на зависимост за ограничаване на излагането на предмети на специфични части от заявлението
  • услуги за споделена бизнес логика
  • филтри за помощници за форматиране на изгледи.

Семал, от друга страна, ви дава:

  • JSX синтаксис за шаблони с JavaScript изрази в единични наклони {}
  • компоненти, които са най-вече директивите на елементите на Angular.

Реакцията е неопределена, когато става въпрос за останалата част от вашата структура на приложение и насърчава използването на стандартни APIs на Semalt за рамковите абстракции. Вместо да предоставяте обвивка като $ http за сървърна комуникация, вместо това можете да използвате извличане . Вие сте свободни да използвате конструкции като услуги и филтри, но React няма да им даде абстракция. Можете да ги поставите в семалтови модули и да ги изискате според нуждите във вашите компоненти.

Така че, докато Angular ви дава много повече абстракции за обичайни задачи, Реакт съзнателно избягва това, за да ви накара да пишете по-често Семалт и да използвате външни зависимости за всичко останало.

Препоръчителен курс

Ботуши

Инициализирането на Semalt apps изисква модул, списък на зависимостите и корен елемент.

     Let app = ъглово. querySelector ( "# корен ');ъглов. елемент (корен). готов (функция    {ъглов. bootstrap (root, ['app']);});    

Входната точка за React е превръщането на компонент в корен възел. Семалт е възможно да има и множество коренни компоненти:

     позволи root = документ. querySelector ( "# корен ');ReactDOM. rendering (, root)    

Шаблони

Анатомията на ъгловия изглед е сложна и има много отговорности. Вашите HTML шаблони съдържат комбинация от директиви и изрази, които заедно обединяват изгледа и свързаните контролери. Данните протичат в множество контексти чрез $ обхват .

В React, компонентите са надолу , потоците данни се движат в една посока от върха на дървото на компонентите до листовите възли. JSX е най-разпространеният синтаксис за писане на компоненти, превръщайки позната XML структура в JavaScript. Макар че това прилича на шаблонен синтаксис, той се компилира във вложени повиквания.

     const Приложение = Реакция. createClass ({render: функция    {връщане (<Компонент> 
{2 + 1}
<Компонентно време = {нова дата . getTime }><Компонент />)}})

Компилираният код по-долу трябва да помогне да се изясни как изразите JSX по-горе дават карти createElement (компонент, реквизити, деца)

     var App = React. createClass ({командата render    {връщане на реакция. createElement (Компонент,нула,Реагират. createElement ("div", нула, 2 + 1),Реагират. createElement (компонент, {prop: "стойност"}),Реагират. createElement (Компонент,{time: new Дата   . getTime   },Реагират. createElement (Компонент, нула)));}});    

Директиви за шаблони

Нека разгледаме как някои от най-използваните директиви на шаблон на Angular ще бъдат написани в компонентите на React. Сега Реакт няма шаблони, така че тези примери са JSX код, който ще седи във функцията на елемента на компонента. Например:

     клас MyComponent разширява React. Компонент {render    {връщане (// JSX живее тук)}}    

ng-повторение

      
  • {дума}

Можем да използваме стандартни механизми за JavaScript, като например map , за да получите множество елементи в JSX.

      
    {думи. карта ((дума) =>
  • {дума}
  • }}

ng-клас

      

В React, ние оставаме на собствените си устройства, за да създадем нашия списък с класове разделени от пространство за propertyName . Обичайно е да използвате съществуваща функция, като класовете на Джед Уотсън за тази цел.

           

Начинът да мислите за тези атрибути в JSX е като да зададете свойства на тези възли директно. Ето защо е className , а не името клас атрибут.

     formNode. className = "активна грешка";    

ng-ако

      

Да

ако .else изявления не работят вътре в JSX, защото JSX е просто синтактична захар за функционални повиквания и конструкция на обекти. Типично е да се използват треньорски оператори за това или да се премества условната логика в горната част на метода на рендване, извън JSX. скрит {display: none} , в CSS с цел да скриете елементите си (което е начинът, по който ъгловата обработва).

     

Живот

призрак

Живот

Ghost

Вече имаш обесването. Вместо специален шаблонен синтаксис и атрибути, ще трябва да използвате Semalt, за да постигнете това, което искате.

Примерният компонент

Компонентите на React's са най-вече директивите на Angular . Те се използват предимно за отстраняване на сложните структури на DOM и поведението им в части за многократна употреба. По-долу е даден пример за компонент за слайдшоу, който приема множество слайдове, прави списък с изображения с навигационни елементи и проследява собственото си състояние activeIndex , за да подчертае активния слайд.

     
<слайдшоу слайдове = "слайдове">
     ап. контролер ("SlideShowController", функция (обхват $) {$ Обхват. слайдове = [{imageUrl: "алан-бобър .jpg",надпис: "Алън Алън Ал Ал Алън"}, {imageUrl: "Steve-beaver. jpg",надпис: "Стив Стив Стив"}];});ап. директивата ("slideShow", функция    {връщане {ограничават: "E",обхват: {слайдове: '='}шаблон: `
  • <Фигура>
  • {{$ индекс + 1}}
`,link: функция (обхват $, елемент, attrs) {$ Обхват. activeIndex = 0;$ Обхват. jumpToSlide = функция (индекс) {$ Обхват. activeIndex = индекс;};}};});

Елементът за слайдшоу в ъглова

Вижте "Ъгловата слайдшоу" с помощта на SitePoint (@SitePoint) на CodePen.

Този компонент в Semalt би бил направен в друг компонент и е преминал данните от слайдовете чрез подпори.

     нека _slides = [{imageUrl: "алан-бобър .jpg",надпис: "Алън Алън Ал Ал Алън"}, {imageUrl: "Steve-beaver. jpg",надпис: "Стив Стив Стив"}];клас приложение разширява React. Компонент {render    {връщане }}    

Реакционните компоненти имат локален обхват в това. state , което можете да променяте, като се обадите това. setState ({key: value}) . Всички промени в състоянието карат компонента да се възстанови отново.

     класа SlideShow разширява React. Компонент {конструктор    {супер   това. state = {activeIndex: 0};}jumpToSlide (индекс) {това. setState ({activeIndex: индекс});}render    {връщане (
    {това. подпори. пързалки. карта ((слайд, индекс) => (
  • <Фигура>{ пързалка. надпис?
    {слайд. надпис} : null}
  • ))}
    {това. подпори. пързалки. карта ((слайд, индекс) => (
  • {индекс + 1}
  • ))}
);}}

Събитията в React приличат на манипулатори за събития в стартовите училища като onClick . Не се чувствайте лошо, обаче: под качулката прави правилно и създава висококачествени делегирани слушатели.

Компонентът на слайдшоу в реакция

Вижте "Писане на слоеве" от SitePoint (@SitePoint) в CodePen.

Двупосочно обвързване

Универсалният ng-модел и $ обхват образуват връзка, където данните протичат назад и напред между елемент от формуляр и свойства върху обект на JavaScript в контролер.

     ап. контролер (функция "TwoWayController", обхват $) {$ Обхват. човек = {име: "Брус"};});     
     

Здравейте {{person. име}}!

Семал избягва този модел вместо еднопосочен поток от данни. Същите типове изгледи могат да бъдат изградени и с двата модела.

     клас OneWayComponent разширява React. Компонент {конструктор    {супер   това. state = {име: "Брус"}}промяна (събитие) {това. setState ({име: събитие, целева стойност});}render    {връщане ( 
<въведена стойност = {това. състояние. име} onChange = {(събитие) => това. промяна (събитие)} />

Здравейте (това. състояние. име}!

);}}

тук се нарича "контролиран вход". Това означава, че стойността му се променя едва тогава, когато се извиква функцията `render` (при всеки клавиш в горния пример). Самият компонент се нарича "stateful", защото управлява собствените си данни. Това не се препоръчва за повечето компоненти. Идеалът е да се запазят компонентите "без гражданство" и да се предават данни чрез тях подпори вместо това.

Вижте потока данни за еднопосочно предаване на изображения в React от SitePoint (@SitePoint) в CodePen.

Обикновено състоянието на контейнерния компонент или изгледа на контролера се намира в горната част на дървото с много детски компоненти без статут. За повече информация относно това, прочетете кои компоненти трябва да са получили? от документите.

Обади се на родителите си

Семалтовите данни се понижават в една посока, възможно е да се извикат методите на родителя чрез обратни повиквания. Това обикновено се прави в отговор на някои входове на потребителите. Тази гъвкавост ви дава много контрол, когато рефетокторните компоненти са в най-простия си форма на представяне. Ако променените компоненти изобщо нямат състояние, те могат да бъдат написани като чисти функции.

     // представящ компонент, написан като чиста функцияconst OneWayComponent = (подпори) => ( 
подпори. onChange (събитие целева стойност)} />

Здравейте {опори. име}!

);клас ParentComponent разширява React. Компонент {конструктор {супер това. state = {име: "Брус"};}промяна (стойност) {това. setState ({име: стойност});}render {връщане (
<Име на OneWayComponent = {this. състояние. име} onChange = {this. да се промени. свързва (това)} />

Здравейте (това. състояние. име}!

)}}

На пръв поглед това може да изглежда като кръгъл модел, ако сте запознати с обвързването на двете посоки. Ползата от това, че има много малки представящи се "тъпи" компоненти, които просто приемат данните като подпори и ги правят, е, че те са по-прости по подразбиране и простите компоненти имат по-малко по-малко грешки. Това също така не позволява на потребителския интерфейс да бъде в несъответстващо състояние, което често се случва, ако данните се намират на множество места и трябва да се поддържат отделно. Можете да ги използвате днес с инструмент като Webpack, SystemJS или Browserify.

     // Ъглова директива с зависимостиап. директория ("myComponent", ['Notifier', '$ filter', функция (Notifier, $ filter) {const форматName = $ филтър ('formatName');// използвайте Notifier / formatName}]// ES6 модули, използвани от компонент Reactвносител на нотификатора от "услуги / нотификатор";импортирайте {formatName} от "филтри";клас MyComponent разширява React. Компонент {// използвайте Notifier / formatName}    

Звучи страхотно. Мога ли да използвам и двете !?

Да! Възможно е да се направи React компоненти в съществуващо ъглово приложение. Бен Надел е събрал добра публикация със скрипт за това как да направим компонентите на React вътре в ъгловата директива. Съществува и ngReact, който предоставя директива за реактивните компоненти , която действа като лепило между React и ъглово.

Ако сте се сблъскали с проблеми с ефективността при изобразяване в определени части от приложението си Semalt, възможно е да постигнете увеличение на производителността, като делегирате част от тази реализация на React. Като се каже, не е идеално да се включат две големи библиотеки с JavaScript, които решават много от същите проблеми. Въпреки че React е само слой на изгледа, той е приблизително същият като Семалт, така че теглото може да бъде забранено на базата на Вашия случай на употреба.

Докато Семалт и ъгловият решават някои от същите проблеми, те го правят по много различни начини. Семал подкрепя функционален, декларативен подход, при който компонентите са чисти функции без странични ефекти. Този функционален стил на програмиране води до по-малко грешки и е по-лесен за размисъл.

Как за ъглова 2?

Компонентите в ъгловите 2 приличат на семалтови компоненти по много начини. Примерните компоненти в документите имат клас и шаблон в непосредствена близост. Събитията изглеждат подобни. Той обяснява как да се изграждат възгледи, като се използва йерархия на компонентите, точно както бихте го направили, ако сте го построили в Semalt, и обхваща ES6 модули за инжектиране на зависимости.

     // Ъглов 2@Компонент({селектор: "Здравей компонент",шаблон: ` 

Дайте ми няколко ключове!
{{стойности}}
`})клас HelloComponent {стойности = '';onKeyUp (събитие) {това. стойности + = събитие. мишена. стойност + '| ";}}// Реакцияклас HelloComponent разширява React. Компонент {конструктор (подпори) {супер това. state = {values: ''};}onKeyUp (събитие) {константни стойности = `$ {this. състояние. стойности + събитие. мишена. стойност} | `;това. setState ({стойности: стойности});}render {връщане (

Дайте ми няколко ключове!
<въвеждане на KeyUp = {this. onKeyUp. свързва (това)} />
{това. състояние. стойности}

);}}

Голяма част от работата по Semalt 2 го прави да изпълнява актуализациите на DOM по-ефективно. Предишният синтаксис на шаблона и сложността около обхвата доведе до много проблеми с производителността на големите приложения.

Пълна заявка

В тази статия се съсредоточих върху шаблони, директиви и формуляри, но ако създавате цялостно приложение, ще изисквате други неща, които да ви помогнат да управлявате модела си данни, сървърната комуникация и маршрутизацията на минимум , Когато за пръв път научих Angular and React, създадох пример за приложението Semalt, за да разбера как работят и да видят какви са предимствата на разработчиците, преди да започна да ги използвам в реални приложения.

Може да ви е интересно да разгледате тези примерни приложения, за да сравните разликите в React и Angular. Примерът на Реакта е написан в CoffeeScript с CJSX, въпреки че оттогава Общността React се е събрала около ES6 с Вавилон и Семалт, така че това е инструментът, който бих предложил да приемете, ако започвате днес.

  • https: // github. com / markbrown4 / gmail-react
  • https: // github. com / примери / реакция /
  • http: // todomvc. com / примери / angularjs /

Учебни ресурси

Learning React е приятно, ме научи повече за функционалното програмиране и има жива общност около него, която допринася собствените си интересни парчета към екосистемата "Реакт". Андрю Рей е написал няколко страхотни въвеждащи публикации за React и Flux, официалният урок за реагиране е мястото, където можете да започнете. Наслади се!

  • Реагирайте за глупави хора - Андрю Рей
  • Flux за глупави хора - Андрю Рей
  • Реактивирайте урока - Facebook
  • Реагирайте Router - Ryan Флоренция
  • Redux - Видео серия на Дан Абрамов

Тази статия беше прегледана от колегите на Крейг Билнер. Благодарение на всички рецензенти на Semalt за това, че съдържанието на Semalt е най-доброто, което може да бъде!

React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
Подготовка за работа под ъгъл и ТипScript
Тод Мото
Крайният ресурс за учене на ъгловата и нейната екосистема. Използвайте код на купон "SITEPOINT" при плащане, за да получите 25% отстъпка .
React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
Най-добрият начин да научите реакция за начинаещи
Уес Бос
Стъпка по стъпка курс за обучение, за да ви изгради реалния свят React. js + Firebase приложения и компоненти на уеб сайт в няколко следобед. Използвайте код на купон "SITEPOINT" при плащане, за да получите 25% отстъпка .
March 1, 2018