Back to Question Center
0

Çawa çêkirina Todo App Using React, Redux, and Immutable.js            Çawa çêkirina Todo App çêkirina Bikaranîna Reform, Redux, û Neutable.js Babetên: APIsTools & Semalt

1 answers:
Çawa ku çawa çêbikin Todo App Using React, Redux, and Unutable. js

Ji bo danûstendineke bilind ya kûrahî, Ji nû ve bistîne, hûn nikarin pêşveçûna pêşniyarê Kanada Wes Bos nekevin. Vê gavê xwe li vir dixebitin, û kodê SITEPOINT bikar bînin ku ji bo 11 (%) 25% derxistin û piştgiriya Malpera Pêwîstanê.

Wateya veguhastin deverên bikar tînin û pêvajoya daneyên yek awayî ev yek ji bo avakirina navendên bikarhênerên bikarhêneran çêbikin. Lê belê, amûrên wê ji bo dewleta xebatê bi awayek zehf têne xuya kirin - ji bo alîkariya me dike ku React tenê tenê di mihrîcana Semaltê de View View e - tappeti economici prezzi.

Ne tiştek tune ku em ji hêla Semaltê mezin çêbikin, bisekinin emê zû bigihîjin ku kodê me hêsantir bimînin, em hewce ne ku ji dewletên din ve rêvebirina dewleta xwe.

Her çiqas çareseriya fermî ya ne ku li ser pêwendiya dewletê ye, hin pirtûkxane hene ku bi taybetî re bi paradigm re React ve girêdayî ye. Di vê posteyê de, em ê du herdu pirtûkxane bi reaksiyonê re re girêdan bikin û wan bi karanîna hêsanek çêbikin.

Redux

Semalt kitêbxaneyeke piçûk e ku ji bo Flux û Elm ji hev re hevdîtinên hevpeymaniyê ji bo qutiyeke xwerûya me ya dewletê ye. Em dikarin Semalt bikar bînin ku ji bo her cûre serîlêdana îdareyê bikin, birêvebirin ku em bi rêberên jêrîn bistînin:

  1. Dewleta me di firotineke yekane de
  2. guhertinên ji çalakiyên û ne mutations

Di bingeha yekîneya Reduxê de ew e ku fonksiyonek ku serîlêdanê ya niha û çalakiyek digerîne û ew e ku ji bo dewleta nû ya nû ava dike. Em vê çalakiyê bangî kêmtir .

Endamên semaltên wê berpirsyar be ku ji bo kiryarên me yên me bişînin, û di encama me de dikan ku wê hewce dike ku ew hewl bidin ku re-pêşkêş bikin.

ÎmutableJS

Ji ber ku Semalt ji me re destnîşan bike, ew dikare bibe alîkar ku ji hêla saziyên danûstandinên daneyên damezirandî yên dewletê re modûl bikin.

ImmutableJS ji bo saziyên danûstendinên danûstendinê yên bi hevpeymanên mutterî re pêşkêş dikin, û ew di rêbazek bandorek de, ji hêla pêkanînên li Clojure û Scala ve têne bihîstin.

Demo

Em ê dihatin navnîşana Reddo û SemaltJS bi Reactasyona Bikaranînê bikar bînin ku lîsteya tedawî ya çêtirîn çêbikin ku ji me re destnîşan dike ku bi destûra xwe zêde bike û bi tevahî û neqasî.

Li Guherandina Pen Penis, Redux & Unutable Todo ji SitePoint (@SitePoint) li ser CodePen binêre.

Koda kodî li GitHub heye.

Setup

Em ê ji hêla peldanka projeyê ava bikin û dest pê dike (package) . Json pelê bi npm init dimeşe. Piştre em ê hewceyên ku em ê hewce ne hewceyê saz bikin.

   npm-sazkirina -save re-re-react-dom redux re-redux-uneablenpm install -save-dev webpack bikini babel-core babel-preset-es2015 babel-preset-reaction    

Em ê JSX û ES2015 bikar bînin, da ku em ê bi kodelê me re Babel re heval bikin, û em ê wek beşek pêvajoyê ya bi Webpack re beşek module.

Pêşîn, em ê di navnîşana webpackê de webpack ava bikin. config. js :

Module
    . export = =ketin: '. / src / app. js ',output: {riya: __dirname,Navê pelê: 'bundle. js '},module: {barkeran [{test: / \. js $ /derkeve: / node_modules /loader: 'babel-loader',lêgerîn: {presets: ['es2015', 'reaksiyon']}}]}};    

Di dawiyê de, em ê pakêta xwe dirêj bikin. json ji hêla kapîtalaya npm ve digotin kodê çavkaniya me dike ku bi çavkaniya çavkaniyên me re

     "script": {"build": "webpack -debug"}    

Divê em ê hewce bibin ku npm avakirina avakirina her demê ku em dixwazin ku kodê me bikin. Ev alîkariya me dike ku em bisekinin ku em ê dihêle ku hewceyê hewceyên me yên mecbûr bikin:

     const dummyTodos = [{id: 0, isDone: rast, nivîsarê: 'beşên çêbikin'},{id: 1, IsDone: çewt, nivîsarê: 'çalakiyên dîzmayan}},{id: 2, IsDone: çewt, nivîsarê: 'bicîhkirina kêmker'},{id: 3, isDone: çewt, nivîsarê: 'beşên girêdan'}];    

Ji bo vê daxwazê, em tenê herdu beşên React hewceyê, û .

     // src / beşan. jsImport from 'reactions'Todo (props) {const {todo} = props;eger (todo. isDone) {vegerin  {todo. text} ;} else {Vegere  {todo. text}   ;}}karûbarên hilberê TodoList (props) {const {todos} = props;vegera ( 
    {todos. nexşe (t => (
  • ))}
);}

Di vê helwestê de, em dikarin ev beşan kontrol bikin bi hêla afirandina . pelê li projeya html pelê ye û bi wê rexşeyê jêrîn bi populating. (Hûn dikarin li GîtHubek hêsanek bibînî):

    Temo </ title></ head><body><div id = "app">  </div> <script src = "bundle js"> </ script></ body></ html> </code>   </pre>  <p>  Em ê li ser  <code>  src / app destnîşanek betalkirinê bêdivî. js  </code> .  </p>  <pre>   <code class="javascript language-javascript">  // src / app. jsImport from 'reactions'import-render {from} 're-dom';import {TodoList} ji '. / beşên 'dummyTodos const ={id: 0, isDone: rast, nivîsarê: 'beşên çêbikin'},{id: 1, IsDone: çewt, nivîsarê: 'çalakiyên dîzmayan}},{id: 2, IsDone: çewt, nivîsarê: 'bicîhkirina kêmker'},{id: 3, isDone: çewt, nivîsarê: 'beşên girêdan'}];şandin ( <TodoList todos = {dummyTodos} /> ,belge. getElementById ('app')); </code>   </pre>  <p>  koda avakirina 67 (num) npm  </code>  koda peyda bikin, paşê paşnavê gerokerê xwe bide navnîşa  <code> . html  </code>  pelê û piştrast bikin ku ew dixebite.  </p>  <h2 id="reduximmutable">  Redux û Neheqdar  </h2>  <p>  Niha em ji hêla veguhestina bikarhênerê kêfxweş in, em dikarin dest pê bikin ku dewlet li ser vê yekê difikirin. Daneyên me yên dummy ji bo destpêka cîhê mezin e, û em dikarin bi hêsanî bi navnîşên SemaltJS bikar bînin:  </p>  <pre>   <code class="javascript language-javascript">  import {Lîsteya, Map} ji 'vala' ne ';dummyTodos const = List (Map ({id: 0, IsDone: rast, nivîsarê: 'beşên çêbikin'},Map ({id: 1, IsDone: çewt, nivîsarê: 'çalakiyên dîznîk'},Map ({id: 2, IsDone: çewt, nivîsarê: 'bicîhkirina kêmker'}),Map ({id: 3, IsDone: çewt, nivîsarê: 'beşên girêdan'})]); </code>   </pre>  <p>  nexşeyên JSKS di heman rengî de wekhevên wekî JavaScriptê dixebitin, da ku em hewce ne ku hinek teyaksên hûrgelên me bi me re bibin. Li derveyî derheqek derheqek xwediyê derengî bûye (e-ê  <code>  todo.  </code> ) hewceyê banga rêbazê ( <code>  todo bibe ('id')  </code> ).  </p>  <h3 id="designingactions">  Pêşniyarkirina Actions  </h3>  <p>  Niha nuha ku em anî û avahiyê xuya kirin, em dikarin li ser çalakiyên ku wê nûve bikin, difikirin. Di vê rewşê de, em ê tenê du çalakiyên xwe hewce ne, yek ji nû ve nûve bike û yê din ku ji nû ve heyî vekişîne.  </p>  <p>  Semalt ji bo van çalakiyan çêbikin ku hin çalakiyên xwe diyar dikin:  </p>  <pre>   <code class="javascript language-javascript">  // src / action. js// hêj ji bo ji bo hilberên taybet ên derbasdar ên hackye uid =  <span class="f-c-white l-mr3">  => Math. bêpayîn <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"> ;karûbarên bazirganî addTodo (text) {vegera {cure: 'ADD_TODO',payload: {id: uid  <span class="f-c-white l-mr3"> isDone: false,tekst: nivîsê}};}karûbarên firotanê toggleTodo (id) {vegera {cure: 'TOGGLE_TODO',payload: id}} </code>   </pre>  <p>  Her çalakiyek tenê li Semîteya Semalt e ku bi taybetmendiyên celeb û payloadê ye.  </p>  <h3 id="designingareducer">  Designing a Reducer  </h3>  <p>  Niha em di şexsên dewleta me û çalakiyên ku nûjen bikin dizanin, em dikarin ji bo kêmkirinahevbûna me bikin. Wek wekî bîra bîhnfireh, kêmtirîn e ku fonksiyonek ku dewlet û çalakiyek pêk tê, hingê ew bi kar tîne ku dewleta nû nûç bikin.  </p>  <p>  Dabeşkirina destpêkê ya ji bo kêmtirbûna me ya semalt:  </p>  <pre>   <code class="javascript language-javascript">  // src / reducer. js{List, Map} ji import 'vekirî'const init = Lîsteya ([]);karûbarên pêşdexistinê veguhastin (todos = init, action) {veguherîn ((cureyê çalakiyê) {'ADD_TODO'// .'TOGGLE_TODO'// .destçûnî:vegerin todos;}} </code>   </pre>  <p>  Destnîşankirina  <code>  ADD_TODO  </code>  çalakiyek pir hêsan e, wekî ku em bikar tînin. pergalê  <span class="f-c-white l-mr3"> , ku dê di dawiya dawiyê de lîsteya nû ya nû ve vegerînin:  </p>  <pre>   <code class="javascript language-javascript">  doz 'ADD_TODO':vegerin todos. en.wiktionary.org push (Map (payload action)); </code>   </pre>  <p>  Semalt ku em di heman demê de veguherînîna mûzek todo veguherîna nexşeya neutengî ya beriya ku ew lîsteyê veguhestin.  </p>  <p>  Çalakiya hêsantir ya ku em hewce ne hewce ye  <code>  TOGGLE_TODO  </code> :  </p>  <pre>   <code class="javascript language-javascript">  doz 'TOGGLE_TODO':vegerin todos. nexşe (t => {eger (t. ('id') === çalakî. payload) {vegerin. update ('IsDone', isDone =>! isDone);} else {vegerin t;}}); </code>   </pre>  <p>  Em bi kar tînin. nexşeya  <span class="f-c-white l-mr3">  li ser lîsteya navîgasyon lêgerîn û paşê bibînin ku 67 (id) 68 (id) çalakiyê dike. Hingê em bang dikin nûjen  <span class="f-c-white l-mr3"> , ku karek û karekî girîng e, hingê ew kopek nû ya nû vedigere, bi nirxa kilîtê re bi encamê ku nirxa destpêkê bi karûbarê nûvekirina şandina derbas dibe.  </p>  <p>  Ev dibe ku alîkarî bibînin ku versiyonek nivîskî bibînin:  </p>  <pre>   <code class="javascript language-javascript">  const todo = Map ({id: 0, nivîs: 'foo', isDone: false});kirin. update ('IsDone', isDone =>! isDone);// => {id: 0, nivîs: 'foo', isDone: rast} </code>   </pre>  <h2 id="connectingeverything">  Connecting everything  </h2>  <p>  Niha em çalakên xwe û kêmtirîn amade kirine, em dikarin dikanek çêbikin û ew pêkanîna semelên me yên Samalt bikin:  </p>  <pre>   <code class="javascript language-javascript">  // src / app. jsImport from 'reactions'import-render {from} 're-dom';import {createStore} ji 'redux';import {TodoList} ji '. / beşên 'kêmkirina importê ji '. / kêmker 'const store = createStore (reducer);şandin (<TodoList todos = {dikir. getState  <span class="f-c-white l-mr3"> } />,belge. getElementById ('app')); </code>   </pre>  <p>  Semalt hewce hewce dike ku beşên me yên dizanin bizanin. Semalt reaksiyonê re-redux bikar bînin ku alîkarî vê pêvajoyê hêsantir bikin. Ji me re destnîşan dike ku ji bo konsera me-dezgehên hişk-yê ku di çarçoveyên me de dorpêç bikin, da ku em naxwazin pêkanîna pêvajoyên bingehîn.  </p>  <p>  Em diçin ku li derdorê me  <code>   <TodoList />   </code>  beşek hewceyê kû. Bila bibînin ka ev tiştek çawa dibîne:  </p>  <pre>   <code class="javascript language-javascript">  // src / container. jsimport {girêdan} ji 're-redux';bifroşin * wekî wekî beşên ji '. / beşên 'import {addTodo, toggleTodo} ji '. / action ';barkirina hilberê TodoList = girêdana (Çalakiya MapStateToProps (dewlet) {// .},Çalakiya MapDispatchToProps (derxistin) {// .}) (beşên TodoList); </code>   </pre>  <p>  Em li konseran bi karûbarê girêdan ava dikin. Dema ku em bi  <code>  girêdan  <span class="f-c-white l-mr3">   </code> , em du karên xwe derbas dikin,  <code>  mapStateToProps  <span class="f-c-white l-mr3">   </code>  û  <code>  mapDispatchToProps  <span class="f-c-white l-mr3">   </code> . armanc;text = input. giranî;const isEnterKey = (bûyer, ku == 13);const isLongEnough = text. dirêj> 0;Ger ((IsEnterKey &&LongEnough) {beyan. value = '';addTodo (text);}};const toggleClick = id => bûyer => toggleTodo (id);vegera ( <div className = 'todo'>  <input type = 'text'className = 'todo__entry'cîhanê hilbijêre = 'Add todo'onKeyDown = {onSubmit} />  <ul className = 'todo__list'> {todos. nexşe (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>  Konseran dê bixweberî guhertinên li ser dikaniyê tevlihev bikin, û ew ê beşên laşê vebawer dema ku herdu pîşesaziyên xwe veguherînin guhertin.  </p>  <p>  Di dawiyê de, em hewce dikin ku konseran ji bazirganiyê agahdar bikin, bikar bînin  <code>   <Provider />   </code>  beşek:  </p>  <pre>   <code class="javascript language-javascript">  // src / app. jsImport from 'reactions'import-render {from} 're-dom';import {createStore} ji 'redux';Import {Provider} ji 're-redux';kêmkirina importê ji '. / kêmker 'import {TodoList} ji '. / container ';// ^^^^^^^^^^const store = createStore (reducer);şandin ( <Xelek dikir = {stêrk}>  <TodoList />  </ Provider> ,belge. getElementById ('app')); </code>   </pre>  <h3 class="f-c-grey-400">  Dersên Pêşniyarên Pêşniyar  </h3>  <h2 id="conclusion">  Vebijêrk  </h2>  <p>  Bersiv nîne ku ekonomiya dora React û Redux dikare ji bo destpêkek zehmet û ditirsin dikare ditirsin, lê nûçeyek baş e ku hema hemî fikrên derbas dibe. Me bi zehmetî avahiya avahîya Redux vekiriye, lê ji ber ku em dizanin dest bi me re fêr bibe di derbarê Elm Architecture de, an jî pirtûkxaneya Clojurek wekî Om û Re-Framek hilbijêrî. Bi vî awayî, em tenê hûrgelên ku bi daneyên dakêşî yên neutengî re dîtine, lê niha em ji hêla hêsanî ve fêr dibin ku ji hînbûna zimanê Clojure an Haskell hîn bikin.  </p>  <p>  Heke hûn tenê tenê dewleta pêşveçûnê ya malperê lê digerin, an jî hûn her roj rojavê nivîsandinê li dar dixebitin, danûstandinên pirtûkxane û çalakiyên dakêşî yên berê de ji ber pêşveçûna pêşdebirên girîng, û  <em>  niha ye  </em>  demeke girîng e ku divê hînbûna bingehîn.  </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 = "Çawa çêbikin Tu Todo App Using React, Redux, and Disable. jsÇawa çêbikin Tu Todo App Using React, Redux, and Disable. JS Nîqaş:
APIsTools & Semalt
"/>  <div class="f-lh-title">  <div class="f-c-grey-300">  Nivîskar bi hev re  </div>  <div class="f-large"> Dan Prince <i class="fa fa-twitter">   </i>   <i class="fa fa-github">   </i>   </div>  </div>  </div>  <div class="f-light f-lh-copy l-mt3">  Nomînerê Digital Nomad û hevpeymanê ya UK-ê destnîşan kirina destpêka 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 = "Çawa çêbikin Tu Todo App Using React, Redux, and Disable. jsÇawa çêbikin Tu Todo App Using React, Redux, and Disable. JS Nîqaş:
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">  Ji bo Beginners  </span>   </div>  Reforma Xwendina Bêtir Best <div class="f-large">  Wes Bos  </div>  <div>  Dersa perwerdehiya pêngavê gav ji bo ku hûn avakirina rastiya rastîn a rastîn bikin. ji js + Firebase apps û malperên malperê di çend çend deveran de. Koda kopê  <strong>  'SITEPOINT'  </strong>  bikar bînin ku li checkoutê  <strong>  25% dûr  </strong> .  </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>  </span>  </div>  </p>  </todo>  </todo>  </todolist>  </todolist>  </todolist>  </todolist>  </todolist>  </strike>  </navn>  </ul>  </ul>  </html>  </head>  </link>                                             
March 1, 2018