React js数组中的警告

时间:2018-11-08 18:41:31

标签: javascript reactjs

我有这个功能

static getDerivedStateFromProps(nextProps, prevState) {
  let { fetching } = nextProps
  const { error } = nextProps

  if (prevState.fetching !== fetching && !fetching) {
    fetching = error
  }
  const userId =
    Object.keys(nextProps.match.params).length > 0
      ? nextProps.match.params[Object.keys(nextProps.match.params)[0]]
      : 'new'
  if (userId !== 'new') {
    const itemUser = nextProps.usersList.filter(item => {
      if (String(item.userid) === userId)
       return item
    })
    return { profileItem: { ...prevState.profileItem, ...itemUser[0] }, index: userId, fetching }
  }
  return { fetching }
}

它可以正常工作,并且可以做它应该做的事,但是我想摆脱这个警告:

  

预期在箭头函数array-callback-return的末尾返回一个值

它说问题已经解决

const itemUser = nextProps.usersList.filter(item => {

1 个答案:

答案 0 :(得分:0)

由于filter的回调函数要求您返回布尔值,因此您只需将该行重写为:

const itemUser = nextProps.usersList.filter(item => String(item.userid) === userId)

由于此功能,问题存在:

item => {
    if (String(item.userid) === userId)
         return item
}

如果为item.userid != userId,则当前不返回任何内容,因此它隐式返回undefinedgood practice总是返回某物,即使它为null或false。在这种情况下,您的函数将按预期工作,因为filter callback需要一个布尔值。返回项目时,项目为truthy,因此过滤器包括该项目。另外,如果您不返回任何内容,它将隐式返回undefined,即falsy,从而过滤掉该项目。

最后,由于您要退货,因此,理想应该改为使用.find()。这将防止在找到该项目后出现过多的迭代,因为您只在寻找一个项目:

const itemUser = nextProps.usersList.find(item => String(item.userid) === userId);
return { profileItem: { ...prevState.profileItem, ...itemUser }, index: userId, fetching }