gpt4 book ai didi

javascript - Redux mapDispatchToProps 声明中的输入顺序

转载 作者:行者123 更新时间:2023-11-30 19:01:22 24 4
gpt4 key购买 nike

我不明白的是,在这个柯里化(Currying)风格声明中,为什么调度输入是第二个?

connect 不是以 dispatch 作为输入调用这个函数,然后将返回值赋给 props 吗?所以返回值应该是获取 id 作为输入并执行某些操作的函数。

但根据我对柯里化(Currying)的理解,应该首先使用 id 作为输入调用此函数,然后可以使用调度输入调用返回的函数。

export const mapDispatchToProps = id => dispatch => {
//e.g. dispatch an action that deletes that id
};

那么为什么这个函数是正确的呢?

最佳答案

如果你这样做

connect(null, mapDispatchToProps)(Component1)

它不会工作。

截至documentation ,

The mapDispatchToProps parameter can be of two forms. While the function form allows more customization, the object form is easy to use.

  • Function form: Allows more customization, gains access to dispatch and optionally ownProps
  • Object shorthand form: More declarative and easier to use

函数形式应该返回对象,但是你的 mapDispatchToProps 返回一个函数,所以它会被忽略。

我认为当 Redux 与 Redux-thunk 一起使用时,您会将此功能视为 action creator。这样它就可以工作,但它应该像这样作为对象 Prop 传递 connect(null, { mapDispatchToProps })(Component1)。这样它将对 Component1 可用。

在内部,connect 执行以下操作

  1. 如果您将函数作为 mapDispatchToProps 传递,它将以 dispatch 作为第一个参数调用。 connect 期望对象作为将被合并到 props 的结果。

    mapDispatchToProps 可以如下实现

     mapDispatchToProps = dispatch => ({
    changeID (id) {
    return dispatch => /* some code */
    }
    })

    组件将接收 changeID 函数作为 prop。并且此功能只能与 Redux-thunk 一起使用。当组件调用 changeID 时,Redux 会将其传递给 Redux-thunk,Redux-thunk 会调用内部函数,并将 dispatch 作为第一个参数提供。

  2. 如果您将对象作为 mapDispatchToProps 传递,则该对象的所有 props 都将成为组件 props 的一部分

    mapDispatchToProps = {
    changeID (id) {
    return dispatch => /* some code */
    }
    }

    本质上,它的工作方式与第 1 点中的代码相同。

所以主要思想是任何带有签名的函数

const SomeFunc = id => dispatch => { /* code */ }

只能与 Redux-thunk 一起使用。 Redux-thunk 将调用提供 dispatch 作为第一个参数的内部函数。

没有 Redux-thunk 只允许跟随 Action 创建者

const SomeFunc = id => ({ type: 'ACTION', id })

它们只是 Action 创造者。

关于javascript - Redux mapDispatchToProps 声明中的输入顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59481799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com