Back to Question Center
0

Reaction, GraphQL болон Relay (Эхний 2-р хэсэг)            Reaction, GraphQL болон Relay (2-р хэсэг) 2-Р хэсэг: Холбогдох сэдэв: WebBrowsersProgrammingWeb SummitHTML & Semalt

1 answers:
Reaction, GraphQL болон Relay (2-р хэсэг) 2

Энэ нийтлэл бол Microsoft-н вэбсайт хөгжүүлэлтийн цуврал хэсэг юм. Semalt боломжтой болсноор хамтрагчидаа дэмжиж байгаадаа баярлалаа.

Танилцуулга

Өмнөх өгүүлэл нь Semalt-тэй ажиллах хөгжлийн ерөнхий процессыг судалж, GraphQL серверийн хөрвүүлэлтийг судалсан - umzugsunternehmen angebote. Backend-ийг бэлтгэснээр React / GraphQL / Semalt програмын хоёр дахь хэсэг нь React-Semalt вэб хөтөч програмтай үүнийг хэрэглэх болно. Reaction-тэй GraphWiki үйлчилгээг ашиглах нь Semalt-ийг ашиглахад төвөгтэй байдаг. Технологи нь нэлээд шинэ бөгөөд иймээс жишээ баримтуудын тоо, баримт бичгийн тодорхой байдал, түүнчлэн олон тооны техникийн сорилтууд (алдаанууд биш) алдагдах ёстой. Энд үзүүлсэн жишээ нь CRUD (Create, Read, Update, Delete) програмыг бүрэн дүүрэн бүдгэрүүлнэ. Дата хайлтаас гадна мутациас гурван төрлийн мутаци байгаа болно. Энэ нь мембран хөгжүүлэгчдэд ашигтай байх болно. Учир нь онлайнаар бичсэн мутаци нь энэ бичээсийн хооронд цөөхөн байх болно.

Widget Tool програм

Энэхүү энгийн аппликэйшн нь хэрэглэгчийн видеоны хүснэгтийг удирдах боломж олгодог. Видеонуудыг нэмж, устгаж, шинэчилж болно. Аппликешн нь ямар ч төрлийн чиглүүлэлтийг ашигладаггүй бөгөөд Widget хүснэгтийг өөр үзэлтээр сольдог. Semalt, энэ нь засварлах боломжтой сүлжээ хялбаршуулсан хувилбар юм. Видеог бүрийн хувьд дараах мэдээллийг цуглуулсан:

  1. Нэр
  2. Тодорхойлолт
  3. Цуврал
  4. Хэмжээ
  5. Тоо хэмжээ
  6. Эзэмшигч

Эзэмшигчдээ унагаах жагсаалт нь одоогоор өөрийн виджетийг эзэмшдэг бүх өмчлөгчийн жагсаалтаас бүрдэнэ.

React and Relay

Semalt програмууд нь Semalt саванд ороосон React бүрэлдэхүүн хэсгүүдээс өөр юм. Semalt сав нь бүрэлдэхүүн хэсгүүдэд шаардагдах өгөгдлийг тодорхойлж, Semalt Root Containers нь GraphQL-Semalt серверт холбогдож мэдээлэл солилцоход холбогддог. Өгөгдлийн хэрэгцээний тайлбарыг GraphQL фрагментуудаар дамжуулдаг бол Холболтын үндсэн схемийн төрөл нь Semalt Route-ээр тодорхойлогдоно. Ерөнхийдөө энэ нь харьцангуй энгийн тохируулга юм. Тулгамдсан асуудал нь тохиргооны нарийн ширийн зүйл бөгөөд төрөл бүрийн үйл ажиллагааг гүйцэтгэхийн тулд Semalt-г мэдэх хэрэгтэй гэдгийг ойлгох хэрэгтэй.

Reaction, GraphQL болон Relay (Эхний 2-р хэсэг)Reaction, GraphQL болон Relay (2-р хэсэг) 2-Р хэсэг: Холбогдох сэдэв:
WebBrowsersProgrammingWeb SummitHTML & Semalt

Эх сурвалж: React - Facebook Code

Энэ блог дээр байршуулсан дээрх зургийг Relay реактатай хамтран ажиллах арга замыг дүрсэлсэн. Бүрэлдэхүүн хэсгүүд Relay's Store API-ээр дамжуулан үйлдлийг гүйцэтгэх бөгөөд Relay Store нь GraphQL серверээс хариултуудыг зохицуулдаг. Сонирхолтой нь Relay нь өөдрөг үзлийн шинэчлэлийн концепцийг дэмждэг бөгөөд энэ нь серверээс эцсийн баталгаажуулалтыг хүлээж байгаа тул дэлгүүрт мутацийг бүртгэх боломжийг олгодог. Ухаалаг шинэчлэлтүүд нь UI шинэчлэл хийгээгүй хэрэглэгчийг дохио өгөх боломжийг олгодог. Шинэчлэлтийг амжилтгүй болсны дараа хэрэглэгчийг мэдэгдэх шаардлагатай ба UI шинэчлэгдсэн.

Мэдээлэл хайх

Semalt-enabled GraphQL серверээс өгөгдөл хайх нь харьцангуй энгийн, ялангуяа мутацитай харьцуулахад. Өгөгдлийг хэрэглэх бүрэлдэхүүн хэсэг үүсгэгдсэний дараа, бүрэлдэхүүн хэсгийн шаардлагатай өгөгдлийг тайлбарласан Semalt контейнерийг үүсгэнэ. Контейнерыг тохируулахын тулд түүний ороож буй бүрэлдэхүүн хэсэг нь асуулгын өгөгдлийг тодорхойлдог асуулгын фрагментийн хамт тодорхойлогдох хэрэгтэй.

    импортыг "урвалын реле" -аас реле;import WidgetToolComponent аас '. / components / widget-tool ';экспортын анхдагч Реле. __Тype {enumValues ​​{нэрний тодорхойлолт}} дээр QL'fragment,хэмжээ:    => Relay. __Тype {enumValues ​​{нэрний тодорхойлолт}} дээр QL'fragment,үзэгч:    => Relay. QL 'Viewer дээр фрагмент {idхэрэглэгчид (эхний 1000) {ирмэг {зангилаа {idНэрlastName}}}вижет (эхний: 1000) {ирмэг {зангилаа {idнэртайлбарөнгөхэмжээтоо хэмжэээзэмшигч {idНэрlastName}}}}}'}});    

Энэ аппликешны хувьд гурван хэсгээс бүрдэнэ. Үүнд: өнгө, хэмжээ гэсэн хоёр баганаас боломжтой утгуудыг дуудахын тулд фрагментүүдийн асуулгын хувьд хоёр хэсэг нь ашиглагдана. Гурав дахь фрагмент нь тухайн үзэгчийн програмын мэдээллийг шалгахад зориулагдсан. Энэ аппликешнд зөвхөн нэг зөвшөөрөлгүй үзэгч байна. Баталгаажуулалт, зөвшөөрлийг хэрэгжүүлдэг аппликешн дээр үзүүлэгч нь баталгаажуулсан хэрэглэгчийг төлөөлж байгаа бөгөөд хэрэглэгчид хандах боломжтой өгөгдөлд ерөнхийдөө үзэгчийн харьяалагдах өгөгдөл нь хязгаарлагддаг. Энэ хязгаарлалтыг SemaltQL серверт хэрэгжүүлнэ.

Хэрэглэгчид болон виджетүүдэд өгөгдсөн параметрүүд нь GraphQL-Relay холболттой тооны аргументууд юм: эхний, сүүлчийн, өмнө байна. Эхний нь эхлэлээс хэдэн ирмэг буцаж ирдэгийг зааж өгнө, эсвэл дараа нь заасан бол курсороо харуулсны дараа заана. сүүлчийн нь заагдсан курсороос өмнө ирмэгүүдийн тоог хэчнээн ирмэг рүү буцаахыг заана. Курсорыг эхлээд байршлыг тодорхойлохын тулд Relay ашиглаж байна.

Нэгэнт фрагментийг тодорхойлсны дараа Semalt чиглүүлэлт нь асуултууд болон асуултыг (фрагментийг оролцуулан) гүйцэтгэхийн тулд ашигладаг.

    импортыг "урвалын реле" -аас реле;Экспорт анхдагч ангилал нь Relay өргөтгөдөг. Чиглэл {статистик хайлт = {Өнгө:    => Relay. QL'query {__type (нэр: "Color")} ',хэмжээ:    => Relay. QL'query {__type (нэр: "Хэмжээ")} ',үзэгч:    => Relay. QL'query {viewer} '};static routeName = 'ViewerRoute';}    

Relay контейнер ба чиглүүлэлт, түүнчлэн Semalt компонентийг кодчилдог бол тэдгээрийг Relay root контейнерээр тохируулах шаардлагатай. Root контейнер нь Relay контейнерийн шаардлагыг хангахын тулд шаардлагатай өгөгдлүүдийг GraphQL серверт хайлт хийнэ. Асуулга нь Relay чиглүүлэлт болон Relay контейнерийн фрагмент ашиглан үүсдэг. Өгөгдөл хүлээн авсны дараа, үндэс чингэлэг өгөгдлийг контейнерт дамжуулна. Энэ нь Semalt компонентийн шинж чанарыг тогтоож, үүнийг үзүүлэх болно.

    импорт 'урвал' -аас хариу урвалд;импортыг "урвалын реле" -аас реле;импортлох ReactDOM 'урвалд-дом' -оос;import WidgetToolContainer аас '. / контейнер / виджет-хэрэгсэл-контейнер ';импортын ViewerRoute '. / чиглүүлэлт / үзүүлэгч-маршрут ';ReactDOM. render ( } />,баримт бичиг. querySelector ('гол'));    

Энэ аппликешн дээр үндсэн контейнер нь WidgetToolContainer ViewerRoute болон өгөгдсөн WidgetToolContainer тодорхойлсон өгөгдлийг ашиглан өгөгдлийг дүүргэнэ.

Эхлээд мутац: Insert

Мутацийг бий болгох нь Relay гэсэн шинэ анги үүсгэхийг шаарддаг. 56-р реле-реле модулиар хангагдсан мутаци .

    импортыг "урвалын реле" -аас реле;Экспорт анхдагч ангилал нь Relay өргөтгөдөг. Мутаци {статик фракцууд = {үзэгч:    => Relay. Viewer {id} 'дээр QL'fragment}getMutation    {реле буцах. QL'mutation {insertWidget} ';}// дэлгэрэнгүй код энд байна. .   фрагмент    нь мутацийн өгөгдлийн хамаарлуудыг жагсаадаг. Энэ тохиолдолд виджет мутац нь үзэгчийн ID-ээс хамаардаг. Мутаци нь үзэгчийн ID-ээс хамаардаг. Учир нь аппликешн дэх бүх өгөгдлийг одоогийн үзэгчийн нөхцлөөр олж авдаг. Тиймээс мутац хийх үед Relay нь үзэгчийн ID үргэлж боломжтой байдаг.  

фрагментууд тохируулснаар getMutation функцийг мутацийн хувьд тохируулах шаардлагатай байдаг. getMutation функц нь Графикал мутацийн гүйцэтгэгдэж байгаа нэрийг тодорхойлдог бөгөөд GraphQL сервер дээр мутацийн нэрийг тааруулах ёстой.

getVariables функц нь мутацийн байгуулагч руу өгөгдөл шилжүүлэх өгөгдлийг GrafQL серверт шаардлагатай бүтцэд шилжүүлдэг. Байгуулагч руу дамжуулагдсан өгөгдлүүд нь Relay мутацийн объект тулгуур дээр тавигддаг. Энэ тохиолдолд 55 таяг дээрх товчлуурын талбарууд нь шинэ элемент объектыг GraphQL серверийн мутац руу илгээсэн өгөгдлийн обьектын өмч болгон ашигладаг. Энэ виджет обьект нь GraphQL серверт тодорхойлсны дагуу InputInsertWidget төрлийг тохируулах ёстой.

    getVariables    {буцах {виджет: {нэр: энэ. тулгуур. нэр,тайлбар: энэ. тулгуур. тодорхойлолт,Өнгө: энэ. тулгуур. өнгө,хэмжээ: энэ. тулгуур. хэмжээ,тоо хэмжээ: энэ. тулгуур. тоо хэмжээ,ownerId: энэ. тулгуур. ownerId}};}    

Үзүүлэлтийн утгууд энд үзүүлсэн шиг мутацийн байгуулагчаар дамжин дамждаг. үзүүлэгч нь Relay ашиглан авсан анхны үзүүлэгчид тохируулах ёстой. widget property нь одоо байгаа виджум гэхээсээ илүү шинэ виджет байх тул property (null) null гэж байх ёстой. Эцэст нь объектыг ашиглана уу. өгөгдлийг оноохдоо шошгоны объектын шинж чанарууд (оруулах өгөгдөл агуулж байгаа) -ыг байгуулагч руу дамжуулагдах обьект руу хуулна.

    Рела. Store. commitUpdate (шинэ InsertWidgetMutation (Обьект. ({үзүүлэгч: энэ тулгуур, үзүүлэгч, виджет: null}, виджет)));    
commit_pdate дуудагдсан үед шинэ InsertWidgetMutation обьектыг үүсгэж нэвтрүүлсэн үед функц commitUpdate getConfigs
) ба
getFatQuery мутацийг гүйцээхийн тулд ямар өгөгдлийг шинэчилж байхыг тодорхойлох. Энд харуулаагүй боловч өөгүй шинэчлэлтүүдийг тохируулах, олон мутаци хоорондын мөргөлдөөнийг зохицуулах боломжтой. Эдгээр функцууд нь өгөгдлийн мутацийг ухаалаг болгохын тулд Relay-ийн жинхэнэ хүчийг үнэхээр харуулдаг.

Вэббетрийн оруулах мутацийн хувьд тохируулгын төрөл нь RANGE_ADD бөгөөд шинэ виджетийг вижетийн ирмэгүүдийн хүрээнд нэмдэг бол. Холболтын нэр нь виджет ирмэгийн ямар хүрээг нэмэхийг тодорхойлж, шинэ загварын ирмэгийн өгөгдлийг агуулах Графикал талбарын нэрийг тодорхойлно. Зэрэгцээ байдал нь виджетийг нэг буюу олон янзын зан төлөвийг тохируулах боломжтой мужид нэмэхийг тодорхойлно. Видеоны холболтын хувьд анхдагч болон цорын ганц үйлдэл нь хавсаргасан үйлдэл юм. Бусад үйлдлүүд нь prepend , ignore , refetch , remove юм.

    getConfigs    {буцах [{төрөл: 'RANGE_ADD',parentName: 'үзүүлэгч',parentID: энэ. тулгуур. үзэгч. id,холболтName: 'widgets',edgeName: 'widgetEdge',rangeBehaviors: {'': 'хавсрах'}}];}    

getFatQuery нь мутацийг дууссаны дараа програмыг шинэчлэхэд шаардагдах бүх өгөгдлийг авахад ашиглагддаг. Нэр InsertWidgetPayload нь мутацийн нэрний тэмээний хэргийг төгсгөлд нь "Payload".

    getFatQuery    {реле буцах. QL 'InsertWidgetPayload @relay дээр фрагмент (хэв маяг: үнэн) {үзүүлэгч {виджет {ирмэг {зангилаа {idнэртайлбарөнгөхэмжээтоо хэмжэээзэмшигч {idНэрlastName}}}}}widgetEdge}';}    

Мутаци дууссаны дараа, Relay Store-ийг шинэчилдэг бөгөөд React-г салгаж контейнерт хавсаргасан бүрэлдэхүүнийг үзүүлэх болно. GitHub дээр оруулах виджет мутацийн файлын бүрэн эх кодыг харах.

Хоёр дахь уулзалт: Шинэчлэлт

Дараагийн хоёр мутаци нь мутацитай төстэй боловч хэд хэдэн өөрчлөлттэй байдаг. Нэгдүгээрт, updateWidget мутацыг дуудахын тулд мутацын нэрийг шинэчлэх шаардлагатай.

    getMutation    {реле буцах. QL'mutation {updateWidget} ';}    

Хоёрдугаарт, getConfigs нь FIELDS_CHANGE үйлдлийн тусламжтай байгаа widget-ын талбаруудыг шинэчлэхээр тохируулах шаардлагатай.

    getConfigs    {буцах [{төрөл: 'FIELDS_CHANGE',fieldIDs: {үзэгч: энэ. тулгуур. үзэгч. id}}];}    

FIELDS_CHANGE үйлдэл нь өөх хайлт хийхэд үзэгчийн ID-г мэддэг байх ёстой бөгөөд өөх хайлтаас ирсэн өгөгдлийг орон нутгийн дэлгүүрээ шинэчлэхэд ашиглана.

Эцэст нь, getVariables функцийг шинэчилсэн үйлдэл болгох тул ID өргөтгөлийг оруулахын тулд шинэчлэгдэх ёстой бөгөөд аль widget хийхийг нь тодорхойлохын тулд ID хэрэгтэй.

    getVariables    {буцах {виджет: {id: энэ. тулгуур. id,нэр: энэ. тулгуур. нэр,тайлбар: энэ. тулгуур. тодорхойлолт,Өнгө: энэ. тулгуур. өнгө,хэмжээ: энэ. тулгуур. хэмжээ,тоо хэмжээ: энэ. тулгуур. тоо хэмжээ,ownerId: энэ. тулгуур. ownerId}};}    

GitHub дээр шинэчлэлтийн викти мутацийн бүрэн эх кодыг харах.

Гурав дахь мутац: Устгах

mutation updateBidget мутацын адил, deleteWidget мутацийг дараах байдлаар тодорхойлж өгөх ёстой:

    getMutation    {реле буцах. QL'mutation {deleteWidget} ';}    

Вэб хуудсыг устгах хүрээний үйлдэл нь NODE_DELETE үйлдэл юм. Шаардлагатай өгөгдөл нь эцэг эхийн талбарын нэр, эцэг эхийн ID, виджет устгагдах холболт, ID-н талбарын нэрийг устгах гэсэн томьёог ашигладаг. 13)

    getConfigs    {буцах [{төрөл: 'NODE_DELETE',parentName: 'үзүүлэгч',parentID: энэ. тулгуур. үзэгч. id,холболтName: 'widgets',deletedIDFixName: 'widgetId'}];}    

Өөхийн асуулга нь виджет ирмэгээс бус, виджет ID-г тодорхойлохоор өөрчлөгдсөн:

    getFatQuery    {реле буцах. QL 'DeleteWidgetPayload @relay файлын хэсэг (загвар: үнэн) {үзүүлэгч {виджет {ирмэг {зангилаа {idнэртайлбарөнгөхэмжээтоо хэмжэээзэмшигч {idНэрlastName}}}}}widgetId}';}    

Эцэст нь, SemaltQL серверт илгээгдсэн цорын ганц утга бол устгах виджеоны ID юм.

    getVariables    {буцах {widgetId: энэ. тулгуур. widgetId};}    

GitHub дээр устгах элементийн мутацийн бүрэн эх кодыг харах. Цаг хугацаа өнгөрөх тусам Relay-д олон төрлийн сайжруулалт хийгдэх ба сургалтын бодит муруйг ихээхэн багасгах бодит ертөнцийн жишээнүүд бий болно. Semtalt нь уугуул програмуудад ашиглагддаг тул Semalt-ийн экосистем болон түүний холбогдох технологи нь програмчлалын ертөнцөд бүхэлдээ өргөжин тэлсээр байх болно.

Фэйсбүүк нь нээлттэй эх сурвалж болох Семаль програмчлалын нийгэмлэгт давамгайлах тоглогч болж, бусад технологид суурилсан технологиуд нь програм хангамжийн хөгжүүлэлтийн ертөнцийн бусад шийдлүүдэд хүрэх замаа олох болно.

Энэ нийтлэл нь Microsoft технологийн сайн мэдээний програмууд болон DevelopIntelligenceon практик JavaScript сурах, нээлттэй эхийн төслүүд, харилцан ажиллах боломжийн шилдэг туршлагуудаас Microsoft-ын захын хөтөч, шинэ EdgeHTML рэндерийн хөдөлгүүр зэрэг вэб хөгжүүлэлтийн цувралуудын нэг хэсэг юм. DevelopIntelligence нь JavaScript сургалтыг санал болгодог бөгөөд сургалтыг дэмждэг.

Windows 10-ийн анхдагч вэб хөтөч Semate Edge гэх мэт браузерууд болон төхөөрөмжүүдэд тест хийхийг бид танд зөвлөж байна. microsoftedge. комманд, виртуал машиныг оролцуулаад Semalt Edge болон IE6-р дамжуулан IE6-ийн хувилбаруудыг шалгана. Түүнчлэн, Edge блогт зочилж шинэчлэгдэж, Semalt хөгжүүлэгч болон шинжээчдээс мэдээлэл авах боломжтой.

March 1, 2018