Rumah > Soal Jawab > teks badan
P粉8059224372023-08-16 15:36:35
const [todos, setTodos] = useState<string[]>([]);
dan
const renderItem = useCallback( () => { //todo's here is a closure, it will not update //a dependency of [] means, just run once. }, [] );
Ini adalah masalah biasa kerana ia tidak jelas. Kerana ini berlaku terlalu kerap, setState
terdapat versi panggil balik. Dalam kod anda, anda sebenarnya menggunakannya untuk menetapkan keadaan, tetapi anda juga perlu menggunakannya untuk mendapatkan keadaan semasa untuk maksimum 10 semakan.
Jadi penyelesaian mudah ialah meletakkan semakan panjang dalam fungsi panggil balik useState.
setTodos((curr) => curr.length >= 10 ? curr : [item.name, ...curr]);
Dalam kod di atas, jika panjang semasa lebih besar daripada atau sama dengan 10, hanya status semasa dikembalikan, jika tidak, item baharu ditambah.
Pilihan lain, sudah tentu, adalah menambah todos untuk menggunakan keadaan Callback, tetapi mengapa ini tidak berfungsi dalam FlashList
, tidak pasti.
Pilihan yang lebih baik ialah mengekstrak Item
sebagai subkomponen lain. Terdapat faedah lain untuk melakukan ini, seperti lebih banyak kebolehkomposisian, perkongsian kod, dan yang paling penting, prestasi.