初始状态Redux存储-无效的道具



在与同事就通过API获取异步数据的初始状态值进行了多次争论后,我们决定将初始值设置为空数组/空对象而不是null会更清楚。

但是当我今天实现它时,我意识到一个空对象会抛出一个'PropTypes警告',即使prop不是必需的,因为它不是null。

将初始值设置为状态内的空对象是一个不好的做法吗?或者有没有办法不得到警告?

我当前的初始状态看起来像:

    const user = (state = {
      isRetrieving: false,
      isUpdating: false,
      hasRetrieved: false,
      didInvalidate: false,
      item: {},
    }, action) => {
      switch (action.type) {
        default:
          return state;
      }
    };

如果在你的应用状态中需要任何东西,你应该让它成为初始状态的一部分,总是以空对象开始会让你在你的组件中添加防御代码(你会让每个组件处理未定义的属性,当这不是一个有用的状态支持时)。

为了更简单,我认为这个问题类似于"我应该让我的类构造函数没有参数吗?",问题是类似的,如果对象总是需要一个特定的参数,使其成为构造函数参数,使其成为初始状态的一部分,不支持不必要的额外状态,因为这会增加复杂性。

所以,不,不要让你的初始状态是一个空对象(也不是null),因为它会使你的组件更复杂,尽管我不认为这是一个坏的redux实践。

最后,注意redux状态与组件道具不一样,如果某些东西实际上是组件道具的默认值(而不是应用程序状态所需的值),你可以使用Component.defaultProps, defaultProps是React组件的静态成员,其值默认设置为Component.propTypes,或者你甚至可以从函数返回这个默认道具。看到https://facebook.github.io/react/docs/reusable-components.html default-prop-values

相关内容

最新更新