Rumah >hujung hadapan web >tutorial js >Memahami Redux: Panduan Komprehensif Pemula
Apabila aplikasi web berkembang dalam kerumitan, keadaan pengurusan menjadi semakin mencabar. Jika anda pernah mendapati diri anda terperangkap dalam web perubahan keadaan yang tidak dapat diramalkan dan aliran data yang sukar untuk dikesan, anda tidak bersendirian. Di sinilah Redux hadir sebagai penyelamat.
Redux ialah perpustakaan pengurusan negeri untuk aplikasi JavaScript, terkenal dengan keberkesanannya, terutamanya apabila digunakan dengan React. Dengan menyediakan cara yang boleh diramal dan terpusat untuk mengurus keadaan aplikasi, Redux memudahkan proses menjejak cara data berubah dari semasa ke semasa dan cara bahagian aplikasi anda yang berbeza berinteraksi antara satu sama lain.
Tetapi kenapa Redux perlu? Dalam mana-mana aplikasi berskala besar, perubahan keadaan boleh berlaku di berbilang tempat, menjadikannya sukar untuk menentukan tempat dan cara sekeping data tertentu diubah. Menyahpepijat dan mengekalkan aplikasi sedemikian boleh menjadi mimpi ngeri. Redux menangani cabaran ini dengan menyimpan keseluruhan keadaan aplikasi dalam satu tempat terpusat yang dipanggil kedai. Pendekatan berpusat ini bukan sahaja memudahkan pengurusan negeri tetapi juga meningkatkan kebolehramalan dan kebolehujian aplikasi anda.
Panduan ini akan membawa anda dalam perjalanan terperinci melalui Redux, daripada memahami konsep terasnya kepada menyediakan dan menggunakannya dalam aplikasi React. Pada penghujung artikel ini, anda akan memahami Redux dengan baik dan dilengkapi dengan baik untuk menerapkannya pada projek anda.
Untuk benar-benar memahami Redux, adalah penting untuk membiasakan diri anda dengan tiga konsep asas: kedai, tindakan dan pengurang. Mari selami lebih mendalam setiap konsep ini.
Di tengah-tengah Redux terletak kedai, repositori berpusat yang menyimpan keseluruhan keadaan aplikasi anda. Kedai ialah satu-satunya sumber kebenaran untuk data apl anda. Tidak kira betapa besar atau kompleksnya aplikasi anda, semua keadaan disimpan di satu tempat, menjadikannya lebih mudah untuk diurus dan nyahpepijat.
Bayangkan kedai sebagai objek JavaScript gergasi yang mengandungi semua maklumat yang diperlukan oleh aplikasi anda untuk berfungsi. Sama ada data pengguna, keadaan UI atau respons pelayan, semuanya disimpan dalam objek ini. Pendekatan berpusat ini berbeza dengan kaedah tradisional mengurus negeri secara tempatan dalam komponen individu, yang boleh membawa kepada ketidakkonsistenan dan kesukaran dalam menjejaki perubahan keadaan.
Stor dalam Redux tidak boleh diubah, bermakna apabila keadaan ditetapkan, ia tidak boleh ditukar terus. Sebaliknya, keadaan baharu dibuat apabila perubahan diperlukan. Ketidakbolehubahan ini adalah penting untuk mengekalkan kebolehramalan dalam aplikasi anda, kerana ia memastikan setiap perubahan keadaan adalah disengajakan dan boleh dikesan.
Tindakan dalam Redux ialah objek JavaScript biasa yang menerangkan peristiwa atau perubahan dalam aplikasi. Mereka seperti utusan yang membawa maklumat tentang apa yang berlaku dalam apl. Setiap tindakan mempunyai sifat jenis yang mentakrifkan sifat tindakan dan, secara pilihan, sifat muatan yang mengandungi sebarang data tambahan yang berkaitan dengan tindakan itu.
Sebagai contoh, dalam aplikasi senarai tugasan, tindakan mungkin mewakili penambahan item tugasan baharu, penyiapan item sedia ada atau pemadaman item. Setiap tindakan ini akan mempunyai jenis yang unik, seperti ADD_TODO, TOGGLE_TODO atau DELETE_TODO dan mungkin termasuk data tambahan seperti ID atau teks todo.
Tindakan dihantar ke kedai, di mana ia diproses oleh pengurang (yang akan kita bincangkan seterusnya). Dengan mentakrifkan dengan jelas perkara yang berlaku dalam aplikasi anda, tindakan membantu mengekalkan aliran perubahan data yang jelas dan boleh difahami.
Penurun ialah fungsi tulen dalam Redux yang mentakrifkan cara keadaan aplikasi harus berubah sebagai tindak balas kepada tindakan. Mereka mengambil keadaan semasa dan tindakan sebagai hujah mereka dan mengembalikan keadaan baru. Istilah "fungsi tulen" bermaksud bahawa output pengurang hanya bergantung pada inputnya (keadaan semasa dan tindakan) dan ia tidak menghasilkan sebarang kesan sampingan, seperti mengubah suai pembolehubah luaran atau melakukan operasi tak segerak.
Dalam Redux, pengurang bertanggungjawab untuk kemas kini keadaan sebenar. Apabila tindakan dihantar, Redux menghantar keadaan semasa dan tindakan kepada pengurang yang sesuai, yang kemudiannya mengira dan mengembalikan keadaan baharu. Proses ini memastikan keadaan berubah dalam cara yang boleh diramal dan boleh dikesan.
Sebagai contoh, pengurang untuk aplikasi senarai tugasan mungkin kelihatan seperti ini:
function todoReducer(state = [], action) { switch (action.type) { case 'ADD_TODO': return [...state, action.payload]; case 'TOGGLE_TODO': return state.map(todo => todo.id === action.payload.id ? { ...todo, completed: !todo.completed } : todo ); default: return state; } }
Dalam contoh ini, todoReducer mengendalikan dua jenis tindakan: ADD_TODO dan TOGGLE_TODO. Bergantung pada jenis tindakan, ia sama ada menambah item tugasan baharu pada keadaan atau menogol status lengkap item sedia ada. Pengurang sentiasa mengembalikan objek keadaan baharu, memastikan keadaan asal kekal tidak berubah.
Sekarang kita telah membincangkan konsep teras Redux, tiba masanya untuk melihat cara ia digabungkan dalam aplikasi dunia sebenar. Dalam bahagian ini, kami akan melalui proses menyediakan dan menggunakan Redux dalam aplikasi React yang mudah.
Langkah pertama dalam menggunakan Redux ialah memasang pakej yang diperlukan. Redux sendiri ialah perpustakaan kendiri, tetapi apabila digunakan dengan React, anda juga perlu memasang react-redux, pakej yang menyediakan pengikatan untuk menyepadukan Redux dengan komponen React.
Untuk memasang Redux dan React-Redux, buka terminal anda dan jalankan arahan berikut dalam direktori projek anda:
npm install redux react-redux
Arahan ini memasang redux dan react-redux, yang akan kami gunakan untuk menyambungkan komponen React kami ke kedai Redux.
Setelah Redux dipasang, langkah seterusnya ialah mencipta kedai. Kedai menyimpan keadaan aplikasi dan menyediakan kaedah untuk menghantar tindakan dan melanggan perubahan keadaan.
Dalam contoh ini, kami akan mencipta kedai untuk aplikasi senarai tugasan yang mudah. Mulakan dengan mencipta fungsi pengurang yang akan mengendalikan perubahan keadaan:
import { createStore } from 'redux'; // This is our reducer function function todoReducer(state = [], action) { switch (action.type) { case 'ADD_TODO': return [...state, action.payload]; case 'TOGGLE_TODO': return state.map(todo => todo.id === action.payload.id ? { ...todo, completed: !todo.completed } : todo ); default: return state; } } // Create the store const store = createStore(todoReducer);
Dalam kod ini, fungsi todoReducer mengendalikan dua jenis tindakan: ADD_TODO untuk menambah item todo baharu dan TOGGLE_TODO untuk menogol status lengkap item. Fungsi createStore daripada Redux digunakan untuk mencipta kedai, menghantar todoReducer sebagai hujah.
Tindakan adalah penting dalam Redux kerana ia menerangkan perkara yang berlaku dalam aplikasi. Walau bagaimanapun, mencipta objek tindakan secara manual setiap kali anda ingin menghantar tindakan boleh menjadi menyusahkan. Di sinilah pencipta tindakan masuk. Pencipta tindakan ialah fungsi yang mengembalikan objek tindakan.
Mari kita tentukan pencipta tindakan untuk menambahkan item tugasan:
function addTodo(text) { return { type: 'ADD_TODO', payload: { id: Date.now(), text, completed: false } }; }
Fungsi addTodo mengambil hujah teks dan mengembalikan objek tindakan dengan jenis ADD_TODO dan muatan yang mengandungi data item todo. Pencipta tindakan ini memudahkan proses penghantaran tindakan, menjadikan kod lebih mudah dibaca dan diselenggara.
Anda juga boleh menentukan pencipta tindakan lain, seperti toggleTodo, untuk menogol status lengkap item todo:
function toggleTodo(id) { return { type: 'TOGGLE_TODO', payload: { id } }; }
Dengan adanya kedai dan tindakan, anda kini boleh menghantar tindakan untuk mengemas kini keadaan. Menghantar tindakan ialah cara anda memaklumkan Redux bahawa sesuatu telah berlaku dalam aplikasi, mencetuskan pengurangan yang sesuai untuk mengemas kini keadaan.
Begini cara anda boleh menghantar tindakan untuk menambah dan menogol item tugasan:
store.dispatch(addTodo('Learn Redux')); store.dispatch(addTodo('Build an app')); store.dispatch(toggleTodo(1621234567890));
Apabila anda menghantar tindakan addTodo, Redux memanggil todoReducer dengan keadaan semasa dan tindakan itu, dan pengurang mengembalikan keadaan baharu dengan item todo yang ditambahkan. Begitu juga, apabila anda menghantar tindakan toggleTodo, pengurang mengemas kini status lengkap item todo yang ditentukan.
Untuk membaca keadaan semasa aplikasi, anda boleh menggunakan kaedah getState yang disediakan oleh kedai. Kaedah ini mengembalikan keseluruhan objek keadaan yang disimpan dalam stor Redux:
console.log(store.getState()); // Output: [{ id: 1621234567890, text: 'Learn Redux', completed: true }, // { id: 1621234567891, text: 'Build an app', completed: false }]
Selain membaca negeri, anda juga boleh melanggan perubahan negeri menggunakan kaedah langgan. Kaedah ini membolehkan anda melaksanakan fungsi panggil balik apabila keadaan berubah, menjadikannya berguna untuk mengemas kini UI atau melakukan kesan sampingan lain sebagai tindak balas kepada kemas kini keadaan:
const unsubscribe = store.subscribe(() => { console.log('State updated:', store.getState()); });
Apabila anda selesai melanggan perubahan keadaan, anda boleh berhenti melanggan dengan memanggil fungsi yang dikembalikan dengan melanggan:
unsubscribe();
Untuk menyepadukan Redux dengan React, anda perlu menyambungkan komponen React anda ke kedai Redux. Di sinilah pakej react-redux dimainkan, menyediakan utiliti Pembekal, useSelector dan useDispatch.
Mulakan dengan membalut keseluruhan aplikasi anda dalam komponen Pembekal, melepasi kedai Redux sebagai prop. Ini menjadikan kedai Redux tersedia untuk semua komponen dalam apl React anda:
import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'react-redux'; import { createStore } from 'redux'; import App from './App'; import todoReducer from './reducers'; // Create the Redux store const store = createStore(todoReducer); ReactDOM.render( <Provider store={store}> <App /> </Provider>, document.getElementById('root') );
Seterusnya, gunakan useSelector dan gunakan cangkuk Dispatch untuk menyambungkan komponen anda ke kedai Redux. useSelector membolehkan anda mengakses keadaan, manakala useDispatch membolehkan anda menghantar tindakan:
import React from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { addTodo, toggleTodo } from './actions'; function TodoList() { const todos = useSelector(state => state); const dispatch = useDispatch(); const handleAddTodo = (text) => { dispatch(addTodo(text)); }; const handleToggleTodo = (id) => { dispatch(toggleTodo(id)); }; return ( <div> <button onClick={() => handleAddTodo('New Todo')}>Add Todo</button> <ul> {todos.map(todo => ( <li key={todo.id} onClick={() => handleToggleTodo(todo.id)} style={{ textDecoration: todo.completed ? 'line-through' : 'none' }} > {todo.text} </li> ))} </ul> </div> ); } export default TodoList;
In this example, the TodoList component displays a list of todo items, with the ability to add new items and toggle their completion status. The useSelector hook retrieves the state from the Redux store, while the useDispatch hook allows the component to dispatch actions.
By connecting your React components to Redux in this way, you can ensure that your application's state is managed consistently and predictably.
While Redux is a powerful tool for managing state in complex applications, it also comes with its own set of best practices and potential pitfalls. Understanding these will help you avoid common mistakes and make the most of Redux in your projects.
In this comprehensive guide, we've covered the fundamentals of Redux, from its core concepts to setting up and using it in a simple React application. Redux is a powerful tool for managing state in complex applications, but it also comes with its own learning curve and best practices.
Dengan memahami stor, tindakan dan pengurang, anda boleh mengawal keadaan aplikasi anda dan memastikan ia berkelakuan boleh diramal dan konsisten. Dengan panduan langkah demi langkah yang disediakan, anda kini boleh menyediakan Redux dalam projek anda sendiri dan mula mengurus keadaan seperti profesional.
Walau bagaimanapun, Redux ialah topik yang luas dengan banyak ciri lanjutan dan kes penggunaan. Untuk mendalami pemahaman anda, pertimbangkan untuk meneroka perkara berikut:
Ingat, menguasai Redux memerlukan masa dan latihan. Lebih banyak anda bekerja dengannya, lebih selesa anda. Teruskan mencuba, teruskan belajar.
Atas ialah kandungan terperinci Memahami Redux: Panduan Komprehensif Pemula. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!