繁体   English   中英

反应 useMemo 依赖数组与额外的依赖

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM