React Redux -为什么要使用嵌套函数?[副本]

qzwqbdag  于 12个月前  发布在  React
关注(0)|答案(1)|浏览(101)

这个问题已经有答案了

Why getPosts() is called within dispatch parentheses? How dispatch is working here?(1个答案)
11天前关闭
我正在编写一个React Redux教程。items.js有下面的代码。为什么要使用嵌套函数?我可以将item和dispatch作为one函数的参数传递。items.js的原始代码和我的想法在底部。请详细说明。先谢了。

export const addItem = (item) => (dispatch) => {
    axios.post('/api/items', item)
    .then(res => {
        dispatch({
            type: ADD_ITEM,
            payload: res.data
        });
    })
    .catch(err => {
        dispatch(returnErrors(err.response.data, err.response.status));
    });
}

export const addItem = (item, dispatch) => {
    axios.post('/api/items', item)
    .then(res => {
        dispatch({
            type: ADD_ITEM,
            payload: res.data
        });
    })
    .catch(err => {
        dispatch(returnErrors(err.response.data, err.response.status));
    });
}
ff29svar

ff29svar1#

你的教程太过时了。现代Redux不使用ACTION_TYPES,thunks(如示例中所示)通常不再以这种形式编写,您可能不需要axios,现在很少需要thenable符号。请改为the official Redux tutorial
(你可能会看到更多的差异,比如reducer没有被写为switch..case函数等,但这不在你的代码示例中-但你基本上是在写2019年之前的Redux)
关于您的问题:在你的例子中,高阶函数是一个创建“thunk”的函数,这是一个特殊的可分派Redux操作的函数形式。因此,它更像是一个“动作创建器函数”,而不是一个“双参数函数”。
通过调用dispatch(addItem(item))来使用thunk,然后Redux本身将执行生成的thunk。addItem(item, dispatch)作为一种符号在Redux中并没有被建立为一种模式,你最终会得到一个其他人无法轻松理解的代码库。
此外,形实转换程序可以读取存储内容,因为形实转换程序的完整签名是(dispatch, getState, extraArgument) => { /* do something */ }-如果您要以自己的风格编写,您最终会调用addItem(item, dispatch, getState, extra),而不是只执行dispatch(addItem(item))并让Redux完成其余工作。

相关问题