Back to Question Center
0

React, Redux, Immutable.js ашиглан Todo App хэрхэн бүтээх            React, Redux, Immutable ашиглан Todo App-г хэрхэн бүтээх вэ? Холбогдох сэдэв: APIsTools & Semalt

1 answers:
React, Redux, Immutable ашиглан Todo App хэрхэн бүтээх вэ. js

React нь өндөр чанартай, гүнзгий танилцуулга бол, та Канадын бүрэн стек хөгжүүлэгч Wes Bos өнгөрсөн байж чадахгүй. Энд хичээлээ оруулаад SITEPOINT ашиглан 25% off авах ба SitePoint-ийг дэмжихэд туслах болно.

React арга нь бүрэлдэхүүн хэсгүүд болон нэг талын өгөгдлийн урсгалыг ашигладаг бөгөөд хэрэглэгчийн интерфэйсүүдийн бүтцийг тодорхойлоход тохиромжтой юм. Гэсэн хэдий ч төртэй ажиллах хэрэгсэл нь санаатай энгийн байдлаар хадгалагдаж байдаг бөгөөд React нь уламжлалт семаль архитектурт харагдах болно.

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

Аппликацийн төлөвийг шийдвэрлэхэд албан ёсны шийдэл байдаггүй боловч React-ийн парадигментэй сайн нийцдэг зарим номын сан байдаг. Энэ нийтлэлд бид React ашиглан хоёр ийм сантай хослуулж, энгийн програм зохиоход ашиглах болно.

Редакт

Семаль бол бидний хэрэглээний төлөв байдал болох Flux and Elm-ийн санааг нэгтгэх жижигхэн номын сан юм. Бид Премталыг ямар ч төрлийн хэрэглээний төрлөөр удирдах боломжтой бөгөөд дараах удирдамжийг дагаж мөрдөнө:

  1. манай төр нэг дэлгүүрт хадгалагдаж байна
  2. өөрчлөлтүүд үйлдлүүд , харин мутаци

Redux дэлгүүрийн цөм нь одоогийн хэрэглээний төлөв болон үйлдлийг авдаг функц бөгөөд шинэ хэрэглээний төлөв үүсгэхийн тулд тэдгээрийг нэгтгэдэг функц юм. Бид энэ функцийг reducer гэж нэрлэдэг.

Манай Семаль компонентууд бидний дэлгүүрт үйл ажиллагаагаа явуулах үүрэгтэй бөгөөд эргээд бидний дэлгүүр дахин сэлбэх шаардлага гардаг.

ImmutableJS

Semalt нь биднийг програмын төлөвийг өөрчилдөггүй учраас програмын төлөв байдлыг өөрчлөх өгөгдлийн бүтцийг ашиглан үүнийг хэрэгжүүлэхэд тустай байж болох юм.

ImmutableJS бидэнд харилцан хамааралтай интерфэйсүүдтэй өгөгдлийн олон тооны өөрчлөгдөх бүтцийг санал болгодог бөгөөд тэдгээр нь Clojure болон Scala-ийн хэрэгжүүлснээр урам зоригтойгоор хэрэгждэг.

Демо

Бид React ашиглан Redux болон SemaltJS-ийг ашиглахын тулд байнгын болон дутуу зүйлсийг хооронд нь нэмэх боломжийг олгодог энгийн todo жагсаалтыг бий болгох болно.

CodePen дээр Pen React, Redux & Immodable Todo SitePoint-аас (@PointPoint) үзнэ үү.

Энэ код нь GitHub дээрх репозиторт байдаг.

Тохируулах

Төслийн хавтас үүсгээд багцыг эхлүүлснээр бид эхлүүлэх болно. json файлын npm init . Дараа нь бид хэрэгтэй байгаа хамааралтай хамааралтайг нь суулгана.

   npm суулгах - урвалд хариу урвалд хариу үйлдэл үзүүлэхгүй байхnpm суулгах - save-dev webpack babel-core babel-loader babel-preset-es2015 babel-preset-react    

Бид JSX болон ES2015-ийг ашиглах болно, тэгэхээр бид кодоо Babel-тэй хөрвүүлэх болно, тэгээд бид үүнийг Webpack-тай модулийг багцлах үйл явцын нэг хэсэг болгох болно.

Эхлээд бид Webpack-ийн тохиргоог webpack дээр үүсгэх болно. config. js :

     модуль. экспорт = {нэвтрэх: '. / src / апп. js ',гарц: {зам: __dirname,файлын нэр: 'bundle. js '},модуль: {ачигч: [{Туршилт: / \. js $ /,оруулахгүй байх: / node_modules /,дуудагч: 'babel-loader',query: {presets: ['es2015', 'react']}}]}};    

Эцэст нь, бид багцаа сунгах болно. json өөрийн кодыг эх газрын зургуудаар эмхэтгэхийн тулд npm скрипт нэмж:

     "скрипт": {"бүтээх": "webpack --debug"}    

Бид кодоо эмхэтгэхийг хүссэн үедээ npm run build тушаалыг ажиллуулах хэрэгтэй болно. Энэ нь бидний бүрэлдэхүүн хэсгүүдийг үзүүлэхэд бидэнд туслах мэдрэмжийг олж авахад тусалдаг:

     const dummyTodos = [{id: 0, isDone: true, текст: 'make components'},{id: 1, isDone: false, текст: 'дизайны арга хэмжээ'},{id: 2, isDone: false, text: 'reducer хэрэгжүүлэгч}},{id: 3, isDone: false, text: 'connect components'}];    

Энэ програмын хувьд бид зөвхөн хоёр React бүрэлдэхүүн хэсгүүд ба хэрэгтэй болно.

     // src / components. jsимпорт 'урвал' -аас хариу урвалд;экспортын үйл ажиллагаа Todo (тулгуур) {const {todo} = таяг;if (todo isDone) {буцах  {todo. текст} ;} else {буцах  {бүхэл бүтэн. текст}   ;}}экспортын функцууд TodoList (тулгуур) {const {todos} = таяг;буцах ( 
{todos. газрын зураг (t => (
  • ))}
    );}

    Энэ үед бид эдгээр бүрэлдэхүүн хэсгүүдийг индекс үүсгэж турших боломжтой. Төслийн фолдер дахь html файлыг дараах байдлаар тэмдэглэнэ үү. (Та GitHub дээр энгийн загварыг олох боломжтой):

        Immutable Todo </ title></ head><body><div id = "app">  </div> <script src = "сагс. js"> </ script></ body></ html> </code>   </pre>  <p>  src / апп  <code>  дээр аппликешн оролтын цэг хэрэгтэй болно. js  </code> .  </p>  <pre>   <code class="javascript language-javascript">  // src / app. jsимпорт 'урвал' -аас хариу урвалд;'react-dom' -аас импорт хийх {render};import {TodoList} '. / бүрэлдэхүүн хэсгүүд ';const dummyTodos = [{id: 0, isDone: true, текст: 'make components'},{id: 1, isDone: false, текст: 'дизайны арга хэмжээ'},{id: 2, isDone: false, text: 'reducer хэрэгжүүлэгч}},{id: 3, isDone: false, text: 'connect components'}];render ( <TodoList todos = {dummyTodos} /> ,баримт бичиг. getElementById ('app')); </code>   </pre>  <p>  Кодыг  <code>  npm run build  </code>  ашиглан хөрвүүлээд дараа нь хөтөчөө  <code>  индекс рүү чиглүүлнэ. html  </code>  файлыг ажиллуулж байгаа эсэхийг шалгаарай.  </p>  <h2 id="reduximmutable">  Redux ба Immacable  </h2>  <p>  Одоо бид хэрэглэгчдийн интерфейсэд баяртай байгаа болохоор бид ард тvмнийхээ талаар бодох болно. Манай домэйн өгөгдөл нь эхлэхэд хамгийн тохиромжтой газар бөгөөд бид үүнийг SemaltJS цуглуулганд амархан орчуулж чадна:  </p>  <pre>   <code class="javascript language-javascript">  Импортын {Дугаар, Газрын зураг} -аас 'өөрчлөгдөхгүй';const dummyTodos = Жагсаалт ([Газрын зураг ({id: 0, isDone: true, text: 'components '),Газрын зураг ({id: 1, isDone: false, text: 'design actions'}),Газрын зураг ({id: 2, isDone: false, text: 'reducer хэрэгжүүлэгч}},Газрын зураг ({id: 3, isDone: false, text: 'connect components'})]); </code>   </pre>  <p>  ImmutableJS газрын зургууд нь JavaScript-ийн обьектуудын нэгэн адил ажилладаггүй болохоор бид зарим бүрэлдэхүүн хэсгүүдэд бага хэмжээний засвар хийх шаардлагатай болно.  <code>  todo.id  </code> ) өмнө нь property хандалт байсан хэдий ч ( <code>  todo get ('id')  </code> ) метод дуудах хэрэгтэй.  </p>  <h3 id="designingactions">  Зохион байгуулах үйл ажиллагаа  </h3>  <p>  Одоо бид дүр хэлбэр, бүтэцтэй болсон тул бид үүнийг шинэчилсэн үйл ажиллагааны талаар бодож эхлэх болно. Энэ тохиолдолд бид зөвхөн хоёр үйлдэл хийх хэрэгтэй, нэгийг нь шинэ онгойлгох, нөгөөдөхийг нь нөгөө рүү нь шилжүүлэх хэрэгтэй болно.  </p>  <p>  Семаль эдгээр үйлдлийг үүсгэх зарим функцийг тодорхойлно:  </p>  <pre>   <code class="javascript language-javascript">  // src / actions. js// төөрөгдүүлсэн өвөрмөц id-ийг үүсгэх товчийг дарж оролдож байнаconst uid =  <span class="f-c-white l-mr3">  => Математик. Санамсаргүй <span class="f-c-white l-mr3"> . toString  </li> . зүсмэл  <div class="l-d-f l-jc-cen f-center l-mh-auto l-o-h l-mt3"> ;export function addTodo (текст) {буцах {төрөл: 'ADD_TODO',төлбөрийн хэмжээ: {id: uid  <span class="f-c-white l-mr3"> ,isDone: false,текст: текст}};}экспортын функц toggleTodo (id) {буцах {төрөл: 'TOGGLE_TODO',төлбөрийн хэмжээ: id}} </code>   </pre>  <p>  Үйлдэл бүр төрөл ба төлбөрийн шинж чанар бүхий Semalt объект юм.  </p>  <h3 id="designingareducer">  Товчоог төлөвлөх  </h3>  <p>  Одоо бид төрийн төлөв байдал, түүнийг шинэчлэх үйл ажиллагаануудыг мэддэг болохоор бид өөрсдийн бууруулагчийг барьж чадна. Сануулагчийн нэгэн адил, бууруулагч нь төлөв байдал, үйл ажиллагаа шаардагдах функц юм, дараа нь шинэ төлөвийг тооцоолоход ашигладаг.  </p>  <p>  Бидний бууруулагчийн анхны бүтцийг сийрүүл:  </p>  <pre>   <code class="javascript language-javascript">  // src / reducer. jsимпорт {жагсаалт, газрын зураг} -ыг "хувиршгүй" -ээс;const init = Жагсаалт ([]);экспортын үндсэн функц (todos = init, action) {солих (үйлдэл төрөл) {case 'ADD_TODO':// .case 'TOGGLE_TODO':// .Анхдагч:буцаж ирэх;}} </code>   </pre>  <p>   <code>  ADD_TODO  </code>  үйлдлийг зохицуулах нь маш хялбар байдаг. push  <span class="f-c-white l-mr3">  арга нь төгсгөлийн хавсралттай todo-тай шинэ жагсаалтыг буцаах болно:  </p>  <pre>   <code class="javascript language-javascript">  тохиолдол 'ADD_TODO':буцах дугаар. түлхэлт (газрын зураг (үйл ажиллагааны төлбөр)); </code>   </pre>  <p>  Бидэнд объект объектыг жагсаалтад оруулахаасаа өмнө хувиршгүй газрын зургийг хувиргаж байна.  </p>  <p>  Бидэнд илүү төвөгтэй үйлдэл хийх нь  <code>  TOGGLE_TODO  </code> :  </p>  <pre>   <code class="javascript language-javascript">  'TOGGLE_TODO' тохиолдол:буцах дугаар. газрын зураг (t => {if (get ('id') === action.loadload) {буцаах t. update ('isDone', isDone =>! isDone);} else {буцах t;}}); </code>   </pre>  <p>  Бид хэрэглэж байна. map  <span class="f-c-white l-mr3">  нь жагсаалт дээр давтахын тулд  <code>  id  </code>  үйлдэлтэй таарах todo олох. Дараа нь бид дууддаг. шинэчлэлт  <span class="f-c-white l-mr3">  нь түлхүүр, функцийг авдаг бөгөөд дараа нь шинэчлэгдсэн функцид анхны утгыг өгсний үр дүнгээр солигдсон газрын зургийн шинэ хуулбарыг буцаана.  </p>  <p>  Энэ нь бодит хувилбарыг харахад тусалж болох юм:  </p>  <pre>   <code class="javascript language-javascript">  const todo = Газрын зураг ({id: 0, текст: 'foo', isDone: false});хийх. update ('isDone', isDone =>! isDone);// => {id: 0, текст: 'foo', isDone: true} </code>   </pre>  <h2 id="connectingeverything">  Бүгдийг холбох  </h2>  <p>  Одоо бид өөрсдийн үйлдлүүд хийгээд бууруулагч бэлэн болсон бөгөөд дэлгүүрээ байгуулж, бидний Semalt компонид холбож болно:  </p>  <pre>   <code class="javascript language-javascript">  // src / app. jsимпорт 'урвал' -аас хариу урвалд;'react-dom' -аас импорт хийх {render};import {createStore} 'redux' аас;import {TodoList} '. / бүрэлдэхүүн хэсгүүд ';импортын бууруулагч '. / бууруулагч ';const store = createStore (reducer);render (<TodoList todos = {store. getState  <span class="f-c-white l-mr3"> } />,баримт бичиг. getElementById ('app')); </code>   </pre>  <p>  Манай компанийг энэ дэлгүүрийн талаар мэдэх хэрэгтэй. Энэ процессийг хялбаршуулахад туслах урвалын redux-ийг хэрэглэдэг. Энэ нь бидний компонентыг тойрсон дэлгүүрийн мэдэгдэж байгаа савыг бий болгодог бөгөөд ингэснээр бид анхны шийдлээ өөрчлөх шаардлагагүй болно.  </p>  <p>  Бид өөрсдийн  <code>   <TodoList />   </code>  бүрэлдэхүүн хэсгүүдийг тойрон хэрэгтэй. Энэ нь ямар харагдахыг харцгаая:  </p>  <pre>   <code class="javascript language-javascript">  // src / контейнерууд. jsimport {connect} 'react-redux' аас;импортын * бүрэлдэхүүн хэсгүүдийн хувьд '. / бүрэлдэхүүн хэсгүүд ';импорт {addTodo, toggleTodo} '. / үйл ажиллагаа ';экспорт нь TodoList = холболт (функцийн зурагStateToProps (төлөв) {// .},функцийн mapDispatchToProps (илгээсэн) {// .}) (бүрэлдэхүүн хэсгүүд TodoList); </code>   </pre>  <p>  Бид контакт функцтэй савыг бий болгодог. Бид 68  </code>  ба  <code>  mapDispatchToProps  <span class="f-c-white l-mr3">   </code>  mapStateToProps  <span class="f-c-white l-mr3"> . зорилтот түвшин;const text = оролт. утга;const isEnterKey = (үйл явдал, аль == 13);const isLongEnough = текст. урт> 0;if (isEnterKey && isLongEnough) {оруулах. утга = '';addTodo (текст);}};const toggleClick = id => event => toggleTodo (id);буцах ( <div className = 'todo'>  <input type = 'text'className = 'todo__entry'placeholder = 'All todo'onKeyDown = {onSubmit} />  <ul className = 'todo__list'> {todos. газрын зураг (t => (<li key = {t. get ('id')}className = 'todo__item'onClick = {toggleClick (t. get ('id')}}<Todo todo = {t. toJS  <span class="f-c-white l-mr3"> } /> </li> ))} </ ul>  </div> );} </code>   </pre>  <p>  Контейнерүүд автоматаар дэлгүүрүүдийн өөрчлөлтийг захиалах болно, тэдгээр нь тулгуур зураглал өөрчлөгдөх бүрт боосон боолтыг дахин үзүүлэх болно.  </p>  <p>  Төгсгөлд нь  <code>   <Хангагч />   </code>  бүрэлдэхүүн хэсгийг ашиглан савны талаар савны талаар мэдлэгтэй байх хэрэгтэй  </p>  <pre>   <code class="javascript language-javascript">  // src / app. jsимпорт 'урвал' -аас хариу урвалд;'react-dom' -аас импорт хийх {render};import {createStore} 'redux' аас;импорт {үйлчилгээ үзүүлэгч} -ийг 'хариу урвалд' оруулахаас;импортын бууруулагч '. / бууруулагч ';import {TodoList} '. / сав ';// ^^^^^^^^^^const store = createStore (reducer);render ( <Provider store = {store}>  <TodoList />  </ Provider> ,баримт бичиг. getElementById ('app')); </code>   </pre>  <h3 class="f-c-grey-400">  Зөвлөмж Курс  </h3>  <h2 id="conclusion">  Дүгнэлт  </h2>  <p>  Экосистемийн эргэн тойронд Реакт ба Редвукс ​​экзистууд нэлээд төвөгтэй бөгөөд эхлэгчдэд айдас төрүүлэхгүй байхыг үгүйсгэхгүй. Гэхдээ сайн мэдээний эдгээр бараг бүх ойлголт дамжуулагдах боломжтой байдаг. Бид Redux-ийн архитекторын гадаргууг бараг хүртэж чадсангүй, гэхдээ аль хэдийн бид "Elm Architecture" -ийг сурч мэдэх эсвэл Om эсвэл Re-frame гэх мэт ClojureScript санг авахад бидэнд хангалттай хэмжээгээр харсан. Үүний нэгэн адил, бид хувьсах хэмжигдэхүүний боломжит хэсгүүдийг зөвхөн харж байсан боловч одоо бид Clojure эсвэл Haskell шиг хэл сурах боломжтой боллоо.  </p>  <p>  Вэб програм хөгжүүлэх төлөвийг хайж байгаа эсэх, эсвэл өдөржингөө JavaScript бичиж өнгөрөөдөг, үйлдлийн архитектурууд болон хувиршгүй өгөгдөлтэй байх туршлага нь хөгжүүлэгчдийн хувьд нэн чухал ур чадвар болж байгаа бөгөөд  <em>  яг одоо  </em>  нь зайлшгүй шаардлагатай зүйлсийг судлах сайхан цаг юм.  </p>  <div class="Article_authorBio l-mv4 t-bg-white m-border l-pa3">  <div class="l-d-f l-pt3">  <img src = "/ img / 6e2f5873a638b37c9799012358afddbe0. com / avatar / 3328d047eacbf158ff38b3c5c7c7fa6b? s = 96 & d = mm & r = g" alt = "React, Redux, Immutable ашиглан Todo App хэрхэн бүтээх. jsReact, Redux, Immutable ашиглан Todo App хэрхэн бүтээх. jsБарилгын сэдэв:
    APIsTools & Semalt
    "/>  <div class="f-lh-title">  <div class="f-c-grey-300">  Зохиогчтой уулзах  </div>  <div class="f-large"> Дан ханхүү <i class="fa fa-twitter">   </i>   <i class="fa fa-github">   </i>   </div>  </div>  </div>  <div class="f-light f-lh-copy l-mt3">  Дижитал Номад ба Их Британид үндэслэсэн Astral Dynamics-ийн үүсгэн байгуулагчдын нэг юм.  </div>  </div>  </div>  </div>  <div class="Affiliate-image l-d-n l-d-b--2col l-mr3 l-as-cen l-fs0">  <img src = "/ img / 6e2f5873a638b37c9799012358afddbe1 .jpg" alt = "React, Redux, Immutable ашиглан Todo App хэрхэн бүтээх. jsReact, Redux, Immutable ашиглан Todo App хэрхэн бүтээх. jsБарилгын сэдэв:
    APIsTools & Semalt
    "/>  </div>  <div class="f-c-grey-400 l-d-f l-ai-cen">  <div class="Affiliate-Box">  <div class="f-larger">   <span class="f-bold Affiliate-title">  Суралцахын тулд хамгийн сайн арга замууд  </span>   </div>  <div class="f-large">  Wes Bos  </div>  <div>  Бодит ертөнцийг бүтээхэд чиглэсэн алхам алхмаар сургалт явуулдаг. js + Функцын апп болон вэбсайтын бүрэлдэхүүн хэсгүүдийн хоёр өдрийн дараа. Купоны код  <strong>  'SITEPOINT'  </strong>  -ийг татаж авахдаа  <strong>  унтраах 25%  </strong>  авах Source .  </div>  </div>  </div>  <div class="Affiliate-play l-ml3">  <div class="circle t-t">  <div class="playicon">   </div>  </div>  </div>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </div>  </p>  </todo>  </todo>  </todolist>  </todolist>  </todolist>  </todolist>  </todolist>  </strike>  </input>  </input>  </html>  </head>  </link>                                           
    March 1, 2018