我有这个功能
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 => {
答案 0 :(得分:0)
由于filter的回调函数要求您返回布尔值,因此您只需将该行重写为:
const itemUser = nextProps.usersList.filter(item => String(item.userid) === userId)
由于此功能,问题存在:
item => {
if (String(item.userid) === userId)
return item
}
如果为item.userid != userId
,则当前不返回任何内容,因此它隐式返回undefined
。 good 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 }