Find the bug in the following React code: const [items, setItems] = useState([]); const addItem = () => { items.push('new'); setItems(items); };

4 phương ánCó giải thích

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "use setItems([...items, 'new'])". State trong React phải được coi là bất biến (immutable): items.push('new') sửa trực tiếp mảng cũ, rồi setItems(items) truyền lại chính tham chiếu đó, React so sánh bằng Object.is thấy giá trị không đổi nên bỏ qua lần render lại và giao diện không hiện mục mới. Cách đúng là tạo mảng mới bằng toán tử spread (trải mảng) gồm các phần tử cũ cộng thêm 'new', tham chiếu khác đi nên component render lại. "useState should be useReducer" không đúng vì useReducer chỉ là lựa chọn khác cho state phức tạp, nó cũng đòi trả về state mới và không tự sửa được lỗi đột biến mảng. "push is not a valid method" sai vì push là phương thức hợp lệ của Array, vấn đề là nó đột biến mảng chứ không phải không tồn tại. "setItems must take a string" sai vì hàm cập nhật nhận giá trị thuộc kiểu bất kỳ hoặc một hàm cập nhật, ở đây state là mảng nên truyền mảng là đúng.

Cùng phần 6

Xuất hiện trong 3 bộ đề