【问题标题】:Why are default states on redux initialized to false instead of empties?为什么 redux 上的默认状态初始化为 false 而不是空的?
【发布时间】:2019-01-31 07:52:05
【问题描述】:

我不确定这是否是常见做法,但当我浏览非常受欢迎的 react-boilerplate 应用程序时,我注意到商店键的默认值总是设置为 @987654322 @不管实际类型是Array、Object、Number还是String。

// The initial state of the App
const initialState = fromJS({
  loading: false,
  error: false,
  currentUser: false,    // String
  userData: {
    repositories: false, // Array of Objects
  },
});

function appReducer(state = initialState, action) {
  .....

这里有最佳实践吗?因为在这个实现中,JSX 组件中的数据类型需要是 Array or Boolean 而不仅仅是 Array,而这正是类型应该放在首位的。

repos: PropTypes.oneOfType([PropTypes.array, PropTypes.bool]),

提前谢谢你。

【问题讨论】:

  • 我敢肯定,这不是最佳做法。您应该始终将 redux 状态初始化为其适当的数据类型。我没有什么可以证明的,但根据我对 javascript 工作原理的想法,它会更简单、更高效。
  • 在我看来这不是一个好习惯。
  • 也许你应该在 repo 中打开一个问题来询问这个问题。对我来说,这看起来也不是一个好习惯。

标签: javascript reactjs types redux react-boilerplate


【解决方案1】:

这不会总是Array/Boolean。当我们在 redux 中存储 API 响应时,它通常以JSON 格式出现,因此它完全取决于数据类型。

以此为例:

const INITIAL_STATE = { 
  isSearchDestinationAvailable: false,
  searchedDestination: {},
  destination: []
};

如果您在初始化状态时更改了它们的任何数据类型,您的应用可能会在验证更新后的 props unmounting/clearing redux store 时崩溃。我和他们玩得很开心。

如有任何疑问,请随时提出。

【讨论】:

  • 在这种情况下,我们知道repos 数据将是一个数组,因为它基于 GitHub API。根据商店的设计,数据类型只会是 Boolean 或 Array,因为我们是这样设置的。我不太明白你的解释
  • 可能会有这样的情况,你将 props 传递给来自 redux 的孩子,并且需要验证一些条件渲染或语句。您需要具有正确的数据类型,否则可能会执行意外的代码块。
  • 好的——那么在您看来,给出初始状态的方法是好是坏?您提到的似乎是处理如何在JSX 文件中定义PropTypes,而不是如何初始化Redux 状态
  • 是的@nikjohn 必须初始化 redux 状态,但必须使用您期望的适当数据类型。当涉及到嵌套对象的初始状态时,您确实需要小心。当我们实际经历这些情况时,这一点会更加清楚。我希望你已经明白了。
猜你喜欢
  • 2017-12-09
  • 1970-01-01
  • 2017-10-15
  • 2019-03-31
  • 2014-02-22
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多