我有useMemo
当它的一个依赖项是Object
我从服务器获得的,所以即使对象的内容是相同的 -useMemo
因为对象本身每次都不同,所以在每次从服务器同步中一遍又一遍地调用它,当然 和 也是一样useCallback
的React.memo
。
我该如何解决这个问题?
我正在考虑手动检查新结果是否与以前的结果具有相同的内容,如果确实如此 - 保留以前的对象引用。
我有useMemo
当它的一个依赖项是Object
我从服务器获得的,所以即使对象的内容是相同的 -useMemo
因为对象本身每次都不同,所以在每次从服务器同步中一遍又一遍地调用它,当然 和 也是一样useCallback
的React.memo
。
我该如何解决这个问题?
我正在考虑手动检查新结果是否与以前的结果具有相同的内容,如果确实如此 - 保留以前的对象引用。
真的有两个选择:
deep-equal
在 npm 上),则不要更改对象:const [obj, setObj] = React.useState();
// ...
const newObj = await getObjectFromServer();
// Using the function form of setState to avoid races and an extra
// dependency on `obj`:
setObj(oldObj => equal(newObj, oldObj) ? oldObj : newObj);
memo
,而不是完整的对象:
React.useMemo(() => obj.foo + 8, [obj]);
React.useMemo(() => obj.foo + 8, [obj.foo]);
obj.foo
但是,这可能很容易变得麻烦,并且如果它本身不是原始的
,那将无济于事。