【发布时间】:2020-06-16 08:05:58
【问题描述】:
我在 Tree 组件(来自 Ant 库)的 onSelect 回调中使用 useDispatch 挂钩(来自 Redux):
export const MyComponent = () => {
const dispatch = useDispatch();
const onSelect = (selectedNode) => {
const selectedItem = selectedNode[0];
dispatch(fetchSelectedItems(selectedItem));
};
return
<Tree
onSelect={onSelect}
>
<TreeNode .. />
<TreeNode .. />
<TreeNode .. />
</Tree
}
export const fetchSelectedItems = (selected: string) =>
(dispatch) =>
axios({
url: `/api/items?id=${selected}`,
method: 'GET',
}).then(response => {
dispatch(fetchSelectedItemsSuccess(response.data))
}).catch((error: any) => {throw(error)});
为什么useDispatch 会重新渲染父组件?有什么办法可以防止这种情况发生吗?我尝试了 useCallback 就像它在 Redux 文档中一样,但 this solution 是为了防止子组件重新渲染,而不是父组件。
【问题讨论】:
-
嗨@kriz 欢迎来到堆栈溢出。你能提供
fetchSelectedItems和父母的代码吗? (因为父级使用通过fetchSelectedItems检索到的数据,所以父级会重新渲染)。 minimal reproducible example 会很棒。 -
即使我做了一些像
dispatch({ type: 'SOME_ACTION_NAME' })这样的“虚拟”调度,也会发生这种情况
标签: javascript reactjs redux react-hooks