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 ánLờ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
In the useEffect hook, how many milliseconds would you wait using setTimeout to perform a side effect after 2 seconds?Có lời giảiCâu hỏiWhich of the following could cause an Effect to run too frequently?Có lời giảiCâu hỏiWhy might this code produce unexpected results?
function Counter() {
const [count, setCount] = useState(0);
const handleClick = () => {
setCount(count + 1);
setCount(count + 1);
};
return <button onClick={handleClick}>{count}</button>;
}Có lời giảiCâu hỏiCả 24 câu của chủ đề24 câu