【问题标题】:Rules for Reducers in ReduxRedux 中的 Reducer 规则
【发布时间】:2021-02-07 18:18:37
【问题描述】:

Redux 中 Reducer 的一个规则是,我们不应该从我们的 reducer 返回 undefined(任何其他返回值似乎都可以,包括 null)

我只是想了解这背后的原因。是不是因为 Redux 库的构建方式?

【问题讨论】:

    标签: reactjs redux react-redux


    【解决方案1】:

    你不能从 reducer 返回 undefined,如果它返回 undefined 那么你会得到一个像这样的错误
    Uncaught Error: Reducer returned undefined when handling action

    我从 redux 文档中得到以下内容:

    在初始化应用程序时,可以使用 undefined 作为状态值调用 reducer。如果发生这种情况,我们需要提供一个初始状态值,以便其余的 reducer 代码可以使用

    【讨论】:

    • 但是为什么会这样……我的意思是在内部说?
    • 如果我们遇到错误,那么这一定是它的构建方式以及为什么有人想要返回 undefined ,可以使用 null 代替它。对不起,我可能错了,但我认为这是它没有返回 undefined 的原因之一
    • 所以,当它说,“当应用程序被初始化时,可能会以 undefined 作为状态值调用减速器”......这到底是什么意思?来自哪个代码?
    • 我还认为,由于 redux 可以与其他构建在不同语言(如 java)上的框架一起使用,这些语言没有未定义的数据类型,但大多数支持 null,所以这可能是原因之一
    • 请查看此页面,并在搜索选项卡中键入 undefined 以搜索他们在那里显示代码的特定文本redux.js.org/tutorials/fundamentals/…
    【解决方案2】:

    这就是 redux 库的构建方式。您可以在此处查看它只是检查并抛出错误消息。

    https://github.com/reduxjs/redux/blob/45111a63d39a0c0fbd8b5417b2ad623718d42d66/src/combineReducers.ts#L78

    在初始化应用程序时,可以使用 undefined 作为状态值调用 reducer。如果发生这种情况,我们需要提供一个初始状态值,以便其余的 reducer 代码可以使用。 Reducers 通常使用 ES6 默认参数语法来提供初始状态:(state = initialState, action)。

    在初始渲染时,可以使用 undefined 初始化状态。所以,用你的初始状态来初始化状态是非常重要的。

    【讨论】:

      【解决方案3】:

      这是在combineReducers 中专门进行的安全检查,以避免意外地返回任何状态:

      https://redux.js.org/api/combinereducers#notes

      • 它绝不能返回undefined。通过提前返回语句很容易错误地执行此操作,因此如果您这样做,combineReducers 会抛出,而不是让错误在其他地方表现出来。

      • 如果给它的stateundefined,它必须返回这个特定reducer 的初始状态。根据前面的规则,初始状态也不能是未定义的。使用 ES6 可选参数语法指定它很方便,但您也可以显式检查第一个参数是否为 undefined

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-10
        • 2019-07-15
        • 2019-05-14
        • 2018-05-29
        • 2019-12-11
        • 1970-01-01
        • 2016-06-21
        • 2017-03-28
        相关资源
        最近更新 更多