我一直在使用 Redux connect HOC 开发带有类组件的旧代码库。之前介绍的RTK切片很少。我有点困惑为什么这两种使用切片操作的方法可以正常工作(可以在 Redux Toolkit 中看到这些方法更新状态并出现在操作面板(左侧)中。
2种方式:
参见下面的示例
const mapDispatchToProps = (dispatch) => {
return {
updateAbc: (params) => dispatch(updateAbc(params)),
updateXyz,
}
}
两者均来自切片文件:
const sampleSlice = createSlice({
name: 'sample',
initialState: {},
reducers: {
updateAbc: () => { /* do something */},
updateXyz: () => { /* do something */}
}
})
const { actions, reducer } = sampleSlice
export const {
updateAbc,
updateXyz,
} = actions
为什么两者都在工作,或者我错过了一些东西,或者它们只是两种有效的方式(但我不知道它如何在没有显式调用调度的情况下调度它)?
为什么两者都在工作,或者我错过了什么,或者它们只是 两种有效的方式(但我不明白它如何在没有 显式调用调度)?
它们都是装饰
connectDispatchToProps
帮助器中动作的有效方法。有关详细信息,请参阅对象速记形式。请注意,重点是我的。
可能是一个对象,其中每个字段都是一个动作 创造者。mapDispatchToProps
import { addTodo, deleteTodo, toggleTodo } from './actionCreators' const mapDispatchToProps = { addTodo, deleteTodo, toggleTodo, } export default connect(null, mapDispatchToProps)(TodoApp)
在这种情况下,React-Redux 将您商店的
绑定到 每个动作创建者都使用dispatch
。bindActionCreators
这对您的代码意味着
updateXyz
被包装在对 dispatch
“自动神奇地”的调用中。
const mapDispatchToProps = (dispatch) => {
return {
updateAbc: (params) => dispatch(updateAbc(params)),
updateXyz, // <-- dispatch bound to action creator
}
}
比较典型的
mapDispatchToProps
会写成这样:
const mapDispatchToProps = {
updateAbc,
updateXyz,
}