[英]React useMemo dependency array with extra dependency
从反应文档:
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
向依赖数组添加另一个值是不好的做法,即使它没有在computeExpensiveValue
中使用?
例子:
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b, c]);
当 c 的c
发生变化时,我有一个 memoizedValue 需要重新计算。 我的 linter 告诉我这是一种不必要的依赖,这让我相信有一种更有意义的替代解决方案......
我能想到的唯一替代方法是将memoizedValue
存储为 state 值,然后将setMemoizedValue
包装在一个 useEffect 挂钩中,该挂钩具有c
作为依赖项。
例子:
const [stateNotMemo, setStateNotMemo] = useState({})
useEffect(() => setStateNotMemo(() => return {...someObject},[c])
编辑:基本上我要做的是在我关闭模态时更新memoizedValue
。
const [showModal, setShowModal] = useState(false);
const memoizedValue = useMemo(() => {
calculateNewValueWhenModalCloses(a,b);
},[a,b,showModal])
const handleCloseModal = () => {
setShowModal(false);
}
const handleOpenModal = () => {
setShowModal(true);
}
// Then some jsx that has two buttons.
// one with onClick={handleCloseModal} (passed to modal component)
// and another with onClick={handleOpenModal}
你可以,但这是代码的味道。 它表明computeExpensiveValue
是不纯的,并且它的c
,尽管它不是一个论点。 如果可行,重构它以传递c
作为附加参数。
useMemo(() => computeExpensiveValue(a, b, c), [a, b, c]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.