在与同事就通过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