Javascript 在Redux connect回调中访问状态和调度
我有一个将状态和分派绑定到函数的函数。例如:Javascript 在Redux connect回调中访问状态和调度,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我有一个将状态和分派绑定到函数的函数。例如: function bindStateToGetFoo = (state, dispatch) => (arg1, arg2) => { const { val1, val1 } = state; dispatch(createAction()); ... }; 我这样做是因为我不想在MapStateTrops和mapDispatchToProps中重复代码。该功能用于多个组件中。这样做更干净: connect( stat
function bindStateToGetFoo = (state, dispatch) => (arg1, arg2) => {
const { val1, val1 } = state;
dispatch(createAction());
...
};
我这样做是因为我不想在MapStateTrops
和mapDispatchToProps
中重复代码。该功能用于多个组件中。这样做更干净:
connect(
state => ({
someFunction: bindStateToSomeFunction(state),
}),
dispatch => ({
anotherFunction: bindDispatchToAnotherFunction(dispatch),
}),
);
然而,当一个函数同时需要状态和分派时,我不知道如何处理它。在Redux
connect
callback中是否有一种方法可以访问状态和分派?您可以这样做吗
function createDispatcherAndSelectorFunctions(...args) {
return {
dispatcher: (id, name) => ({
type: "MY ACTION"
payload: {
id, name
}
}),
selector: (state) => state.foo
}
}
const {dispatcher, selector} = createDispatcherAndSelectorFunctions("hello world");
connect(
state => ({
data: selector(state),
}),
dispatch => ({
fn: (id, name) => dispatch(dispatcher(id, name))
})
);
你能这样做吗
function createDispatcherAndSelectorFunctions(...args) {
return {
dispatcher: (id, name) => ({
type: "MY ACTION"
payload: {
id, name
}
}),
selector: (state) => state.foo
}
}
const {dispatcher, selector} = createDispatcherAndSelectorFunctions("hello world");
connect(
state => ({
data: selector(state),
}),
dispatch => ({
fn: (id, name) => dispatch(dispatcher(id, name))
})
);
您应该将
redux-thunk
作为中间件添加到redux中。这将使您能够像wantAlso一样访问状态和分派。因此,以连接方式绑定状态和分派是一种更详细的方式。连接组件时,dispatch
将作为组件上的道具显示。您可以从组件本身进行调度:)redux-thunk
是个好主意。我已经为async安装了它,但没有意识到这是另一个用例Yep!听起来很容易解决!如果您想分享您的项目,我很乐意帮助您展示如何使用redux thunk和其他工具清理/减少冗长的代码:)您应该将redux thunk
作为中间件添加到redux中。这将使您能够像wantAlso一样访问状态和分派。因此,以连接方式绑定状态和分派是一种更详细的方式。连接组件时,dispatch
将作为组件上的道具显示。您可以从组件本身进行调度:)redux-thunk
是个好主意。我已经为async安装了它,但没有意识到这是另一个用例Yep!听起来很容易解决!如果您想分享您的项目,我很乐意帮助您展示如何使用redux thunk等工具清理/减少冗长的代码:)