当prop通过defaultState

时间:2018-01-02 23:07:31

标签: javascript reactjs redux

在redux应用程序中,我在reducers文件中设置了defaultState

/* reducers.js */
const defaultState = {
  items: [],
  loadingFlags: {
    items: false
  },
  userData: {
    name: '',
    id: null
  }
}

const rootReducer = (state = defaultState, action) => {
  switch (action.type) {
    case 'ADD_ITEM'
      return addItem(state, action)
    /* etc */
  }
}

然后在设置值后使用组件中的值:

/* UserDisplay.js */
const UserDisplay = props => <div>{props.username}</div>

const mapStateToProps = state => ({
  username: state.userData.name
})

使用这样的架构,UserDisplay.defaultProps是否不必要?我之前已经看过你有`defaultState和

的地方

A)

UserDisplay.defaultProps = {username: ''}

b)中

const mapStateToProps = state => ({
  username: state.userData.name || ''
})

这两个似乎都是多余的,因为reducers.js将始终将userData.name设置为''。是否存在需要方法A或B的情况(例如,用户名设置为异步)?

1 个答案:

答案 0 :(得分:0)

我认为这取决于,对吗?具有defaultProps的组件是否会被另一个容器使用?还是用另一台减速机?在这种情况下,它值得拥有默认道具。

如果其他容器从不使用该组件,则默认道具是多余的。

根据this tweet from Dan Abramov

  

如果某些东西很容易机械化,让你感觉良好,并且实际上并没有减少代码中的错误,那么你很可能会浪费你的时间。

  

在实际使用它们两次之前,请勿将“表示组件”分开。等

如果您需要默认道具,因为您遇到了错误,那么是。如果一个组件将被其他容器重用,那么拥有默认道具是一个安全的想法。

我说根据每种情况判断这一点。