0

在我的功能组件中,我想记住一些取决于Id对象属性的值:

obj={
  innerProperty:{
    id:1
  }
}
useMemo(()=>someComplaxFunction(), [obj.innerProperty.id])

我想做这样的事情,但问题是,innerProperty可以undefined。所以我需要为innerProperty添加一个检查,但是我不能在外面添加它,useMemo因为它给了我错误,即不应该有条件地调用钩子,甚至不能在内部调用,因为我将不得不添加obj我不想要的依赖项,因为其他属性可能会改变。

需要知道我怎样才能做到这一点。任何帮助表示赞赏。

提前致谢!

4

3 回答 3

1
obj={
  innerProperty:{
    id:1
  }
}
const id = obj.innerProperty ? obj.innerProperty.id : undefined

// or using optional chaining(?.)
const id = obj.innerProperty?.id

useMemo(()=>someComplaxFunction(id), [id])
于 2021-06-04T07:01:14.883 回答
0

在您someComplaxFunction()检查的值innerProperty并返回类似的值,null以便您记住null在这种情况下的值(或您想要的任何其他值)。然后在你的组件中使用记忆值,假设它可能是null.

于 2021-06-04T07:00:47.730 回答
0

猜猜你应该做一些检查。您不能在您的依赖数组中执行该逻辑,但您可以这样做:

useMemo(()=> {
    if (obj.innerProperty.id) {
        someComplaxFunction()
    }
}, [obj.innerProperty])
于 2021-06-04T07:00:52.953 回答