Reactjs 是否有方法仅在某些状态更改时使组件重新渲染?

Reactjs 是否有方法仅在某些状态更改时使组件重新渲染?,reactjs,react-hooks,Reactjs,React Hooks,我有两个reducer,我相信当其中一个发出动作时,这两个reducer将使我的组件重新呈现: const [toDoListState, toDoListDispatch] = useReducer(toDoListReducer, []); const [httpState, httpDispatch] = useReducer(httpReducer, {isLoading: false, errorMsg: null}); 问题是,httpState更改使组件无意义地重

我有两个reducer,我相信当其中一个发出动作时,这两个reducer将使我的组件重新呈现:

    const [toDoListState, toDoListDispatch] = useReducer(toDoListReducer, []);
    const [httpState, httpDispatch] = useReducer(httpReducer, {isLoading: false, errorMsg: null});
问题是,httpState更改使组件无意义地重新渲染。有没有办法使我的组件仅在toDoListState更改时重新渲染

据我所知,在基于类的React组件中有shouldComponentUpdate。与ReactHook的等价物是什么


我在谷歌上搜索,人们说React.memo,但我似乎不明白它是如何工作的,以及如何将它应用到我的代码中。

我要做的是首先使用React profiller之类的工具来查看组件重新渲染的确切原因。现在我知道了原因,我会使用一些技术,比如memo,或者usemo或callback来停止无用的重新渲染,我要做的是首先使用react profiller之类的工具来查看组件重新渲染的确切原因。现在我知道了原因,我会使用一些技术,如memo、usemo或callback来停止无用的重新渲染,直到依赖项发生变化,usemo始终返回相同的值。比如说

const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
现在让我们假设
computeExpensiveValue(1,1)==2

意味着
memorizedValue
现在将始终返回2,而不执行计算,直到a或b发生变化


但真正的问题是:如果不想让http状态更新组件,为什么需要它?

useMemo
将始终返回相同的值,直到依赖项更改为止。比如说

const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
现在让我们假设
computeExpensiveValue(1,1)==2

意味着
memorizedValue
现在将始终返回2,而不执行计算,直到a或b发生变化


但真正的问题是:如果不想让http状态更新组件,为什么需要http状态?

为什么这个组件需要
httpState
?你能重构使它不再需要吗?为什么这个组件需要
httpState
?你能重构使它不再需要吗?