Pengurusan negeri ialah bahagian penting dalam membina aplikasi dinamik dan interaktif dalam React. Walaupun useState mencukupi untuk mengurus keadaan mudah, apabila keadaan aplikasi anda bertambah dalam kerumitan, useReducer menawarkan cara yang lebih berkuasa dan boleh diramal untuk mengendalikannya. Diilhamkan oleh corak pengurang Redux, useReducer membolehkan anda menentukan cara peralihan keadaan harus berlaku sebagai tindak balas kepada tindakan tertentu, menjadikannya sesuai untuk senario dengan kemas kini keadaan berbilang kompleks.
Dalam artikel ini, kami akan:
Mari kita mendalami cara useReducer boleh memudahkan pengurusan keadaan anda dalam React!
useReducer ialah cangkuk React yang direka untuk situasi di mana useState gagal. Daripada mengemas kini keadaan terus, anda menentukan fungsi pengurang yang mengira keadaan seterusnya berdasarkan keadaan semasa dan tindakan. Pendekatan deklaratif ini memastikan peralihan keadaan boleh diramal dan membolehkan anda mengurus logik keadaan yang lebih kompleks dengan cara terpusat.
Berikut ialah pecahan sintaks:
const [state, dispatch] = useReducer(reducer, initialState);
pengurang: Fungsi yang mentakrifkan cara keadaan perlu dikemas kini berdasarkan tindakan. Ia memerlukan dua hujah:
initialState: Nilai permulaan untuk keadaan.
Mari kita buat pembilang mudah menggunakan useReducer untuk melihat sintaks dalam tindakan.
import React, { useReducer } from 'react'; function reducer(state, action) { switch (action.type) { case 'increment': return { count: state.count + 1 }; case 'decrement': return { count: state.count - 1 }; default: return state; } } function Counter() { const [state, dispatch] = useReducer(reducer, { count: 0 }); return ( <div> <p>Count: {state.count}</p> <button onClick={() => dispatch({ type: 'increment' })}>Increment</button> <button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button> </div> ); } export default Counter;
useReducer amat berguna apabila:
Dalam projek ini, kami akan mencipta pembilang yang dipertingkatkan yang membolehkan berbilang operasi (kenaikan, pengurangan, penetapan semula) untuk melihat cara useReducer mengendalikan set tindakan yang lebih luas.
const [state, dispatch] = useReducer(reducer, initialState);
import React, { useReducer } from 'react'; function reducer(state, action) { switch (action.type) { case 'increment': return { count: state.count + 1 }; case 'decrement': return { count: state.count - 1 }; default: return state; } } function Counter() { const [state, dispatch] = useReducer(reducer, { count: 0 }); return ( <div> <p>Count: {state.count}</p> <button onClick={() => dispatch({ type: 'increment' })}>Increment</button> <button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button> </div> ); } export default Counter;
Kaunter yang dipertingkat ini kini menyokong kefungsian tetapan semula sebagai tambahan kepada kenaikan dan penurunan. Projek ini menunjukkan fleksibiliti useReducer dalam mengurus tindakan untuk kemas kini keadaan.
Apl senarai tugasan menyerlahkan cara useReducer sesuai untuk mengurus objek keadaan kompleks dengan berbilang peralihan, seperti menambah, mengalih keluar dan menogol tugas.
import React, { useReducer } from 'react'; function reducer(state, action) { switch (action.type) { case 'increment': return { count: state.count + 1 }; case 'decrement': return { count: state.count - 1 }; case 'reset': return { count: 0 }; default: throw new Error(`Unknown action: ${action.type}`); } }
import React, { useReducer, useState } daripada 'react'; fungsi ToDoList() { const [todos, dispatch] = useReducer(todoReducer, []); const [tugas, setTask] = useState(''); const handleTambah = () => { jika (task.trim()) { dispatch({ type: 'add', payload: task }); setTask(''); // Kosongkan medan input } }; kembali ( <div> <h2>Senarai Tugasan</h2> <masukan value={task} onChange={e => setTask(e.target.value)} placeholder="Masukkan tugasan baharu" /> <butang onClick={handleAdd}>Tambah Tugas</button> <ul> {todos.map(todo => ( <li key={todo.id}> <h3> Penjelasan Kod Senarai Tugasan </h3> <ol> <li> <p><strong>Tindakan</strong>:</p> <ul> <li> <strong>Tambah</strong>: Menambah tugas baharu pada senarai dengan ID unik dan status lengkap ditetapkan kepada palsu.</li> <li> <strong>Alih keluar</strong>: Memadamkan tugasan dengan menapisnya berdasarkan ID.</li> <li> <strong>Togol</strong>: Menandai tugas sebagai selesai atau belum selesai dengan menogol status selesai.</li> </ul> </li> <li><p><strong>Menggunakan useReducer dengan Data Dinamik</strong>: Contoh ini menunjukkan cara useReducer mengendalikan kemas kini keadaan yang kompleks dan bersarang dalam pelbagai objek, menjadikannya sempurna untuk mengurus item dengan berbilang sifat.</p></li> </ol> <hr> <h2> Kesimpulan </h2> <p>Dalam artikel ini, anda telah mempelajari cara menggunakan useReducer dengan berkesan untuk pengurusan keadaan yang lebih kompleks dalam aplikasi React. Melalui projek kami:</p><ol> <li> <strong>Kaunter Dipertingkat</strong> menunjukkan cara useReducer memudahkan berbilang kemas kini keadaan berasaskan tindakan.</li> <li> <strong>Senarai Tugasan</strong> menggambarkan cara mengurus objek keadaan kompleks, seperti tatasusunan tugas, dengan useReducer.</li> </ol> <p>Dengan useReducer, anda boleh menulis kod yang lebih bersih, lebih boleh diramal dan boleh diselenggara untuk aplikasi yang memerlukan pengurusan keadaan yang mantap. Eksperimen dengan projek ini dan pertimbangkan untuk menggunakanReducer pada kali seterusnya anda menghadapi logik keadaan kompleks dalam apl React anda!</p>
Atas ialah kandungan terperinci useReducer: React Hooks. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!