How do you dispatch an action when a button is clicked?
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: "const handleClick = () => { dispatch({ type: 'BUTTON_CLICKED' }); };
<button onClick={
handleClick
}
>Click me</button>;". Trong Redux, action là một object thuần bắt buộc có thuộc tính type, và ta gửi nó tới store bằng dispatch; để làm việc đó khi bấm nút, ta định nghĩa hàm handleClick gọi dispatch rồi truyền chính tham chiếu hàm đó cho onClick, để React chỉ gọi nó khi sự kiện click xảy ra. Cách viết onClick={() => handleClick()} cũng chạy được, nhưng chỉ bọc thêm một hàm mũi tên thừa, tạo hàm mới ở mỗi lần render mà không đem lại gì khi không cần truyền tham số, nên không phải cách trực tiếp mà câu hỏi muốn. Cách viết onClick={handleClick()} sai vì dấu ngoặc khiến hàm bị gọi ngay trong lúc render: dispatch chạy mỗi lần render, store đổi, component render lại và dễ thành vòng lặp, còn onClick nhận giá trị trả về undefined nên bấm nút không làm gì. Cách viết dispatch({ action: 'BUTTON_CLICKED' }) sai vì object thiếu thuộc tính type, Redux sẽ báo lỗi action có type undefined và reducer không nhận ra được action này.