Tôi gặp vấn đề khi sử dụng phương tiện Redux với phương pháp connect()
từ react-redux. Tôi có mã sau:React Redux connect() với Redux thunk
function Component(props) {
return (
<button onClick={props.callback}>Click here</button>
);
}
function actionCreator() {
console.log('#1');
return dispatch => console.log('#2'); // = thunk
}
const mapDispatchToProps = dispatch => ({
callback: actionCreator
});
export const Container = connect(null, mapDispatchToProps)(Component);
Khi tôi hiển thị thành phần Container
và nhấp vào nút, chỉ '# 1' đang được hiển thị trong bảng điều khiển. Vì vậy, 'thunk' không được thực hiện.
Khi tôi dứt khoát cử actionCreator()
, nó làm việc:
const mapDispatchToProps = dispatch => ({
callback: dispatch => dispatch(actionCreator())
});
The Redux docs says this about mapDispatchToProps:
Nếu một đối tượng được thông qua, mỗi chức năng bên trong nó sẽ được giả định là một người sáng tạo hành động Redux
Vậy tại sao mapDispatchToProps không dispatch()
sốcủa tôi? Tôi mới sử dụng React, vì vậy có lẽ tôi không hiểu nó đúng không?
Cập nhật
Khi sử dụng bindActionCreators()
từ Redux nó không làm việc:
const mapDispatchToProps = dispatch => {
return bindActionCreators({
callback: actionCreator
}, dispatch);
};
Đây có phải là cách chính xác để ràng buộc actioncreators với connect()
?
cảm ơn câu trả lời của bạn. Tôi đã bao gồm redux-thunk như middleware vào cửa hàng của tôi. Mã của bạn không hoạt động. Nó gửi actionCreator trực tiếp khi thành phần gắn kết. Khi tôi sau đó nhấp vào nút Tôi nhận được lỗi "this.props.callback không phải là một chức năng" –
Bạn đang phải, tôi thấy vấn đề thực sự bây giờ. Thay đổi hàm 'mapDispatchToProps' thành ' const mapDispatchToProps = dispatch => ({callback:() => dispatch (actionCreator())}); ' và nó sẽ hoạt động. Tôi đã chỉnh sửa câu trả lời ở trên để phản ánh điều đó và giải thích lý do tại sao điều đó là cần thiết! – mxstbr
Cảm ơn bạn lần nữa. Vấn đề là 'callback: dispatch => dispatch (actionCreator())' thực sự hoạt động. Nhưng sau đó các tham số được truyền vào 'callback()' (từ thành phần) sẽ không được chuyển vào 'actionCreator()'. Tôi đã thấy rằng 'bindActionCreators()' hoạt động ngay bây giờ. –