Takeaways Key
Kelebihan terbesar corak fluks ialah ia menyimpan data aplikasi anda rata. Oleh kerana mutasi boleh dilakukan hanya melalui tindakan, lebih mudah untuk memahami bagaimana perubahan data mempengaruhi keseluruhan aplikasi.
nota:
Proses di atas telah dipermudahkan oleh perpustakaan yang dipanggil refluks. Ia menghilangkan konsep penghantar dengan membuat tindakan didengar. Oleh itu, di kedai -kedai refluks boleh secara langsung mendengar tindakan dan bertindak balas terhadap penyerahan mereka.
untuk memahami corak fluks sepenuhnya mari kita membina aplikasi mengambil nota mudah dengan refluks, reaksi, dan node.js.
menyediakan persekitaran pembangunan
grunt watch grunt nodemon
Bekerja di App
inilah yang dilakukan oleh setiap komponen:
mari kita gunakan refluks untuk membuat beberapa tindakan. Jika anda membuka tindakan/noteactions.js, anda dapat melihat bagaimana tindakan dibuat. Inilah coretan:
grunt watch grunt nodemon
reflux.createActions digunakan untuk membuat tindakan. Kami mengeksport tindakan ini untuk menggunakannya dalam komponen kami.
Kami mempunyai satu kedai yang dipanggil Notestore yang mengekalkan pelbagai nota. Kod berikut digunakan untuk membuat kedai (kedai/notestore.js):
<span>var Reflux = require('reflux'); </span> <span>var NoteActions = Reflux.createActions([ </span> <span>'createNote', </span> <span>'editNote' </span><span>]); </span> module<span>.exports = NoteActions;</span>
seperti yang anda lihat, kami mendengar dua tindakan, createnote dan editnote, di dalam kaedah init. Kami juga mendaftarkan panggilan balik untuk dilaksanakan apabila tindakan dipanggil. Kod untuk menambah/mengemas kini nota cukup mudah. Kami juga mendedahkan getters untuk mendapatkan senarai nota. Akhirnya, kedai dieksport supaya ia boleh digunakan dalam komponen kami.
Semua komponen React kami terletak di direktori React/Components. Saya telah menunjukkan struktur keseluruhan UI. Anda boleh menyemak kod sumber yang dimuat turun untuk mengetahui lebih lanjut mengenai setiap komponen. Di sini saya akan menunjukkan kepada anda perkara utama (iaitu bagaimana komponen kami memanggil tindakan dan berinteraksi dengan kedai).
notelistbox:
Komponen ini memperoleh senarai nota dari Notestore dan memberi mereka kepada komponen notelist yang kemudiannya menjadikan nota tersebut. Berikut adalah bagaimana komponen kelihatan seperti:
<span>var Reflux = require('reflux'); </span><span>var NoteActions = require('../actions/NoteActions'); </span> <span>var _notes = []; //This is private notes array </span> <span>var NoteStore = Reflux.createStore({ </span> <span>init: function() { </span> <span>// Here we listen to actions and register callbacks </span> <span>this.listenTo(NoteActions.createNote, this.onCreate); </span> <span>this.listenTo(NoteActions.editNote, this.onEdit); </span> <span>}, </span> <span>onCreate: function(note) { </span> _notes<span>.push(note); //create a new note </span> <span>// Trigger an event once done so that our components can update. Also pass the modified list of notes. </span> <span>this.trigger(_notes); </span> <span>}, </span> <span>onEdit: function(note) { </span> <span>// Update the particular note item with new text. </span> <span>for (var i = 0; i < _notes.length; i++) { </span> <span>if(_notes[i]._id === note._id) { </span> _notes<span>[i].text = note.text; </span> <span>this.trigger(_notes); </span> <span>break; </span> <span>} </span> <span>} </span> <span>}, </span> <span>//getter for notes </span> <span>getNotes: function() { </span> <span>return _notes; </span> <span>}, </span> <span>//getter for finding a single note by id </span> <span>getNote: function(id) { </span> <span>for (var i = 0; i < _notes.length; i++) { </span> <span>if(_notes[i]._id === id) { </span> <span>return _notes[i]; </span> <span>} </span> <span>} </span> <span>} </span><span>}); </span> module<span>.exports = NoteStore; //Finally, export the Store</span>
Apabila komponen pemasangan kita mula mendengar peristiwa perubahan Notestore. Ini disiarkan apabila terdapat mutasi dalam senarai Nota. Komponen kami mendengarkan acara ini supaya ia dapat membuat semula nota dalam kes sebarang perubahan. Baris berikut mendaftarkan pendengar:
<span>var React = require('react'); </span><span>var NoteList = require('./NoteList.jsx'); </span><span>var NoteStore = require('../../stores/NoteStore'); </span> <span>var NoteListBox = React.createClass({ </span> <span>getInitialState: function() { </span> <span>return { notes: NoteStore.getNotes() }; </span> <span>}, </span> <span>onChange: function(notes) { </span> <span>this.setState({ </span> <span>notes: notes </span> <span>}); </span> <span>}, </span> <span>componentDidMount: function() { </span> <span>this.unsubscribe = NoteStore.listen(this.onChange); </span> <span>}, </span> <span>componentWillUnmount: function() { </span> <span>this.unsubscribe(); </span> <span>}, </span> <span>render: function() { </span> <span>return ( </span> <span><div className="col-md-4"> </span> <span><div className="centered"><a href="" onClick={this.onAdd}>Add New</a></div> </span> <span><NoteList ref="noteList" notes={this.state.notes} onEdit={this.props.onEdit} /> </span> <span></div> </span> <span>); </span> <span>} </span><span>}); </span> module<span>.exports = NoteListBox;</span>
Jadi, apabila terdapat kaedah perubahan onchange komponen dipanggil. Kaedah ini menerima senarai nota yang dikemas kini dan mengubah keadaan.
<span>this.unsubscribe = NoteStore.listen(this.onChange);</span>
sebagai this.state.notes diluluskan sebagai prop kepada notelist, apabila keadaan berubah semula notelist-render sendiri.
Akhirnya, kami menulis ini.UnsubScribe () di dalam ComponentWillUnmount untuk mengeluarkan pendengar.
Jadi, ini adalah bagaimana notelist sentiasa tetap terkini dengan mendengar acara perubahan kedai. Sekarang mari kita lihat bagaimana nota dibuat/diedit.
notecreationbox:
Lihatlah kaedah notecreationbox berikut:
grunt watch grunt nodemon
Kaedah ini dipanggil apabila butang Simpan diklik. Ia menerima NoteText sebagai parameter pertama. Jika ID diluluskan sebagai parameter kedua, kita tahu ini adalah operasi edit dan memohon tindakan noteactions.EditNote (). Jika tidak, kami menjana ID untuk nota baru dan panggilan noteactions.createenote (). Ingat Notestore kami mendengar tindakan ini. Bergantung pada tindakan panggilan balik kedai yang sesuai dilaksanakan. Sebaik sahaja data bermutasi, kedai mencetuskan peristiwa perubahan dan komponen notelist kami mengemas kini sendiri.
Ini adalah bagaimana data mengalir ke dalam sistem dan seterusnya keluar dalam aplikasi berasaskan fluks.
Anda mungkin tertanya -tanya mengapa saya menggunakan React dan Refluks pada pelayan. Salah satu ciri keren React ialah komponen boleh diberikan pada klien dan pelayan. Menggunakan teknik ini, anda boleh membuat aplikasi isomorfik yang diberikan pada pelayan dan juga berkelakuan sebagai aplikasi halaman tunggal. Walaupun ini mungkin tidak diperlukan untuk aplikasi nota, anda boleh menggunakan persediaan ini dengan mudah untuk membina aplikasi isomorfik kompleks pada masa akan datang.
Saya menggalakkan anda untuk melalui kod sumber dan memperbaikinya lebih lanjut kerana terdapat banyak ruang untuk penambahbaikan. Sekiranya anda mempunyai pertanyaan, beritahu saya dalam komen.
Terima kasih kerana membaca!
Interaksi Pengguna dalam aplikasi nota yang dibina dengan React dan Fluks biasanya dikendalikan melalui tindakan. Apabila pengguna berinteraksi dengan komponen React (seperti mengklik butang untuk menambah nota baru), ia mencetuskan tindakan. Tindakan ini menghantar data kepada penghantar, yang mengemas kini kedai yang berkaitan. Kedai kemudian memancarkan peristiwa perubahan, menyebabkan komponen React Mendengarkan untuk mengemas kini dan membuat semula. -Merat yang dibina dengan React dan Fluks boleh dilakukan dengan menggunakan pelbagai perpustakaan dan kerangka ujian. Untuk komponen reaksi ujian unit, perpustakaan seperti jest atau enzim boleh digunakan. Untuk menguji tindakan fluks dan kedai, anda boleh menggunakan Jest bersama-sama dengan perpustakaan seperti redux-mock-store atau flux-mock-store. Ujian akhir-ke-akhir boleh dilakukan menggunakan alat seperti cypress atau dalang. Dengan React dan Fluks boleh dilakukan menggunakan pelbagai alat. Lanjutan Alat Pemaju React untuk Chrome dan Firefox membolehkan anda memeriksa hierarki komponen React, props, dan negara. Untuk debugging fluks, anda boleh log tindakan dan perubahan keadaan ke konsol, atau menggunakan alat seperti Redux Devtools jika anda menggunakan Redux sebagai pelaksanaan fluks anda.
Atas ialah kandungan terperinci Membuat aplikasi mengambil nota dengan React dan Fluks. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!