Back to Question Center
0

Kumaha Ngawangun hiji App Todo Maké meta, Redux, sarta Immutable.js            Kumaha Ngawangun hiji App Todo Maké meta, Redux, sarta Immutable.jsRelated Topik: APIsTools & Semalt

1 answers:
Kumaha mun Ngawangun hiji App Todo Maké meta, Redux, sarta Immutable. JS

Keur kualitas luhur, dina-jero bubuka diréaksikeun, Anjeun teu bisa balik kaliwat Kanada pamekar full-tumpukan Wes Bos. Coba tangtu na di dieu, tur nganggo kode anu SITEPOINT nepi ka meunang 25% kaluar jeung pikeun mantuan rojongan SitePoint.

Cara The meta migunakeun komponen-komponen sareng aliran data salah arah ngajadikeun eta idéal pikeun ngajéntrékeun struktur interfaces pamaké - amp super admin fee meaning. Sanajan kitu, parabot na pikeun gawé bareng kaayaan anu diteundeun ngahaja basajan - mantuan ngingetkeun urang yen meta téh kakara Témbongkeun dina arsitektur Semalt tradisional.

Aya nanaon eureun kami ti gedong aplikasi badag kalayan ngan Semalt, tapi urang bakal gancang manggihan yén tetep kode kami basajan, urang kukituna kudu ngatur kaayaan kami nguap.

whilst aya euweuh resmi solusi pikeun kaayaan kaayaan aplikasi, aya sababaraha perpustakaan anu align utamana ogé kalayan paradigma meta urang. Di posting, urang gé masangkeun meta jeung dua pustaka misalna jeung dipake ku maranehna ngawangun aplikasi basajan.

Redux

Semalt mangrupakeun perpustakaan leutik nu tindakan minangka wadah pikeun kaayaan aplikasi urang, ku ngagabungkeun pamendak ti Flux na elm. Urang bisa make Semalt pikeun ngatur nanaon nu kaayaan aplikasi, nyadiakeun kami lengket kana éta pedoman di handap:

  1. kaayaan urang geus diteundeun dina toko tunggal
  2. parobahan datangna ti lampah teu mutations

Dina inti hiji toko Redux mangrupakeun fungsi nu nyokot kaayaan aplikasi arus jeung hiji aksi sarta ngagabungkeun aranjeunna nyieun kaayaan aplikasi anyar. Urang nelepon fungsi ieu reducer .

komponén Semalt kami bakal jawab ngirim lampah ka toko kami, sarta dina gilirannana toko kami bisaeun komponén basa aranjeunna kudu ulang ngarobah.

ImmutableJS

Kusabab Semalt teu ngidinan urang mutate kaayaan aplikasi, bisa jadi mantuan ngalaksanakeun ieu ku modeling kaayaan aplikasi kalawan struktur data immutable.

ImmutableJS nawarkeun kami sababaraha struktur data immutable kalawan interfaces mutative, sarta aranjeunna nuju dilaksanakeun dina cara efisien, diideuan ku implementations di Clojure na Scala.

Demo

Urang nuju bade nganggo meta jeung Redux na SemaltJS ngawangun daptar todo basajan nu ngamungkinkeun urang pikeun nambahkeun todos na toggle aranjeunna antara lengkep jeung lengkep.

Tingali dina Pen meta, Redux & Immutable Todo ku SitePoint (@SitePoint) on CodePen.

Kode ieu aya dina Repository on GitHub.

Setup

Urang gé ngamimitian ku nyieun hiji folder proyék na initializing a pakét. json file kalawan npm init . Teras we gé masang kabebasan urang nuju bade peryogi.

   npm install --save meta meta-DOM redux meta-redux immutablenpm install --save-dev webpack Babel-core Babel-bastian Babel-prasetél-es2015 Babel-prasetél-meta    

Urang gé jadi maké JSX na ES2015, sangkan gé compile kode kami kalawan Babel, sarta kami geus bade ngalakukeun ieu salaku bagian tina prosés modul bundling kalawan Webpack.

Nu kahiji, urang gé nyieun konpigurasi Webpack kami di webpack. config. JS :

     modul. ékspor = {Éntri: '. / Src / aplikasi. JS ',output: {jalur: __dirname,Ngaran koropak: 'kebat. jS '},modul: {loaders: [{test: / \. JS $ /,ngaluarkeun: / node_modules /,bastian: 'Babel-bastian',query: {prasetél: [ 'es2015', 'meta']}}]}};    

Tungtungna, urang gé manjangkeun kami pakét. json ku nambahkeun hiji Aksara npm mun compile kode kami kalayan peta sumber:

     "Aksara": {"Ngawangun": "webpack --debug"}    

Urang gé kudu ngajalankeun npm amprok ngawangun unggal waktu urang hayang compile kode kami. Ieu ngabantuan kami meunang ngarasakeun pikeun naon nuju bade kami mun perlu komponén urang pikeun ngarobah:

     const dummyTodos = [{Id: 0, isDone: leres, téks: 'nyieun komponen'},{Id: 1, isDone: palsu, téks: 'lampah desain'},{Id: 2, isDone: palsu, téks: 'nerapkeun reducer'},{Id: 3, isDone: palsu, téks: 'nyambung komponén'}];    

Pikeun aplikasi ieu, urang nuju ngan bade peryogi dua meta komponén, jeung .

     // src / komponén. jSimpor meta tina 'meta';fungsi ékspor Todo (prop) {const {todo} = prop;lamun (todo. isDone) {balik  {todo. téks} ;} Sejenna {balik  {todo. téks}   ;}}fungsi ékspor TodoList (prop) {const {todos} = prop;balik ( < 'Todo' div className =>  < 'Todo__list' ul className => {Todos. peta (t => (  ))}   
);}

Dina tahap ieu, urang tiasa nguji komponén ieu ku nyieun hiji indéks. html file di folder proyék na populating dinya jeung aksara di handap. (Anjeun tiasa manggihan hiji stylesheet basajan dina GitHub):

    Immutable Todo 

Urang ogé bakal butuh hiji titik Éntri aplikasi dina src / aplikasi. JS .

     // src / aplikasi. jSimpor meta tina 'meta';impor {ngarobah} tina 'meta-DOM';impor {TodoList} tina '. / Komponén ';const dummyTodos = [{Id: 0, isDone: leres, téks: 'nyieun komponen'},{Id: 1, isDone: palsu, téks: 'lampah desain'},{Id: 2, isDone: palsu, téks: 'nerapkeun reducer'},{Id: 3, isDone: palsu, téks: 'nyambung komponén'}];ngarobah (  ,dokumen. getElementById ( 'aplikasi'));    

compile kodeu jeung npm amprok ngawangun , lajeng napigasi panyungsi anjeun kana indéks. html file na pastikeun yén ayeuna teh berpungsi.

Redux na Immutable

Ayeuna urang keur senang jeung panganteur pamaké, urang bisa ngamimitian mikir ngeunaan kaayaan di tukangeun eta. data dummy kami mangrupakeun tempat gede pikeun ngamimitian ti, sarta bisa gampang narjamahkeun kana SemaltJS kumpulan:

     impor {Daptar, Peta} tina 'immutable';const dummyTodos = Daptar ([Peta ({id: 0, isDone: leres, téks: 'nyieun komponen'}),Peta ({id: 1, isDone: palsu, téks: 'lampah desain'}),Peta ({id: 2, isDone: palsu, téks: 'nerapkeun reducer'}),Peta ({id: 3, isDone: palsu, téks: 'nyambung komponén'})]);    
peta

ImmutableJS ulah dianggo dina cara nu sarua salaku objék JavaScript urang, sangkan gé kudu nyieun sawatara tweaks slight kana komponén urang. Mana aya aksés sipat saméméh (e. G. todo. Id ) perlu jadi panggero metoda gantina ( todo. Meunang ( 'id') ).

ngarancang Laku lampah

Ayeuna urang saena bentuk jeung struktur ilahar kaluar, urang bisa ngamimitian pamikiran ngeunaan laku lampah anu bakal ngamutahirkeun eta. Dina hal ieu, urang ngan bakal butuh dua tindakan, salah nambahkeun todo anyar sarta séjén pikeun toggle hiji hiji aya.

Semalt nangtukeun sababaraha fungsi pikeun nyieun lampah ieu:

     // src / lampah. jS// Hack succinct pikeun generating Gajah Mungkur unik passableconst uid =    => math. acak   . toString   . nyiksikan  
;fungsi ékspor addTodo (téks) {balik {Jenis: 'ADD_TODO',payload: {id: uid ,isDone: palsu,téks: téks}};}fungsi ékspor toggleTodo (id) {balik {ngetik: 'TOGGLE_TODO',payload: id}}

Saban Peta téh ngan hiji objek Semalt sareng jenis sarta payload sipat.

ngarancang Reducer a

Ayeuna urang nyaho bentuk kaayaan urang jeung lampah nu ngomean eta, urang tiasa ngawangun reducer urang. Sagampil panginget a, reducer nu ngarupakeun hiji fungsi anu nyokot kaayaan sarta hiji aksi, teras migunakeun eta ngitung hiji kaayaan anyar.

Semalt struktur awal pikeun reducer kami:

     // src / reducer. jSimpor {Daptar, Peta} tina 'immutable';const init = Daptar ([]);fungsi standar ékspor (todos = init, aksi) {switch (aksi. tipe) {hal 'ADD_TODO':// .hal 'TOGGLE_TODO':// .standar:balik todos;}}    

Ngatur dina ADD_TODO aksi anu cukup basajan, saperti urang tiasa nganggo. push metoda, anu bakal balik daptar anyar jeung todo appended dina tungtungna:

     hal 'ADD_TODO':balik todos. push (. Peta (aksi payload));    

Semalt yén urang nuju ogé ngarobah objek todo kana hiji peta immutable saméméh ayeuna teh kadorong onto daptar.

Peta leuwih kompleks kami kudu ngadamel nyaeta TOGGLE_TODO :

     hal 'TOGGLE_TODO':balik todos. peta (t => {lamun (t. meunang ( 'id') === Peta. payload) {balik t. update ( 'isDone', isDone => isDone!);} Sejenna {balik t;}});    

Urang nuju ngagunakeun. peta kana iterate leuwih daptar tur manggihan todo anu id cocog aksi. Teras we nelepon. update , anu nyokot konci na fungsi hiji, mangka mulih salinan anyar peta, jeung nilai di konci diganti ku hasil tina ngaliwatan nilai awal kana pungsi Apdet.

Éta bisa ngabantu pikeun nempo versi literal:

     const todo = Peta ({id: 0, teks: 'foo', isDone: palsu});todo. update ( 'isDone', isDone => isDone!);// => {id: 0, teks: 'foo', isDone: leres}    

Nyambungkeun Sagala

Ayeuna urang saena lampah urang jeung reducer siap, urang bisa nyieun hiji toko tur sambungkeun ka komponen Semalt kami:

     // src / aplikasi. jSimpor meta tina 'meta';impor {ngarobah} tina 'meta-DOM';impor {createStore} tina 'redux';impor {TodoList} tina '. / Komponén ';diimpor reducer tina '. / Reducer ';toko const = createStore (reducer);ngarobah ( } />,dokumen. getElementById ( 'aplikasi'));    

Semalt kudu nyieun komponen urang sadar toko ieu. Semalt nganggo meta-redux pikeun mantuan simplify prosés ieu. Ieu ngamungkinkeun urang pikeun nyieun peti toko-sadar yen mungkus sabudeureun komponén urang, ku kituna urang ulah kudu ngarobah implementations aslina urang.

Urang nuju bade perlu wadahna sabudeureun urang komponén. Hayu urang tingali naon ieu Sigana mah:

     // src / peti. jSimpor {nyambung} tina 'meta-redux';impor * sakumaha komponén tina '. / Komponén ';impor {addTodo, toggleTodo} tina '. / Lampah ';const ékspor TodoList = nyambung (mapStateToProps fungsi (kaayaan) {// .},mapDispatchToProps fungsi (dispatch) {// .}) (Komponén TodoList).;    

Urang nyieun peti jeung fungsi Connect. Lamun urang nelepon nyambung , urang lulus dua fungsi, mapStateToProps jeung mapDispatchToProps . sasaran;téks const = input. nilai;const isEnterKey = (acara nu == 13.);const isLongEnough = téks. panjang> 0;lamun (isEnterKey && isLongEnough) {input. nilai = '';addTodo (téks);}};const toggleClick = id => acara => toggleTodo (id);balik ( < 'Todo' div className => < 'Todo__list' ul className => {Todos. peta (t => ( } /> ))}

);}

The peti bakal otomatis ngalanggan parobahan di toko, sarta maranéhna gé ulang ngarobah komponén dibungkus iraha prop maranéhna dipetakeun robah.

Tungtungna, urang kedah nyieun peti sadar toko, ngagunakeun komponén:

     // src / aplikasi. jSimpor meta tina 'meta';impor {ngarobah} tina 'meta-DOM';impor {createStore} tina 'redux';impor {Provider} tina 'meta-redux';diimpor reducer tina '. / Reducer ';impor {TodoList} tina '. / Peti ';// ^^^^^^^^^^toko const = createStore (reducer);ngarobah (      ,dokumen. getElementById ( 'aplikasi'));    

Disarankeun Kursus-kursus

Kacindekan

Aya aya denying nu ékosistem nu sabudeureun meta jeung Redux tiasa rada rumit sarta intimidating pikeun beginners, tapi warta alus nyaeta anu ampir sakabéh konsep ieu transferable. Simkuring geus bieu keuna beungeut arsitektur Redux urang, tapi geus urang geus katempo cukup pikeun mantuan kami ngamimitian diajar ngeunaan The elm Arsitéktur, atawa nyokot perpustakaan ClojureScript kawas Om atanapi Re-pigura. Kitu ogé, urang geus ngan katempo fraksi ti kemungkinan kalawan data immutable, tapi ayeuna urang nuju hadé dilengkepan ngamimitian diajar basa kawas Clojure atanapi Haskell.

Naha nu nuju ngan Ngalanglang kaayaan ngembangkeun aplikasi wéb, atawa Anjeun méakkeun kabéh dinten nulis JavaScript, pangalaman jeung arsitéktur dumasar Peta-na data immutable ieu geus jadi hiji skill vital pikeun pamekar, jeung ayeuna nyaéta waktu hébat janten diajar teh kabutuhan poko.

Kumaha Ngawangun hiji App Todo Maké meta, Redux, sarta Immutable. jSKumaha Ngawangun hiji App Todo Maké meta, Redux, sarta Immutable. Topik jsRelated:
APIsTools & Semalt
The Best Jalan mun Diajar meta pikeun Beginners
Wes Bos
A Tangtu latihan hambalan-demi-hambalan keur meunang nu ngawangun dunya nyata meta. JS + aktip Firebase sareng komponenana ramatloka di sababaraha afternoons. Kode Paké Kupon 'SITEPOINT' di Checkout mun meunang 25% kaluar .

March 1, 2018