我在Ant库中的树组件的
为什么
onSelect
回调函数中使用Redux的useDispatch
hook: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
会重新渲染父组件?有没有办法防止这种情况发生?我尝试了Redux文档中使用useCallback
的方法,但这种解决方案只能防止子组件重新渲染,而不能防止父组件重新渲染。
fetchSelectedItems
和父组件的代码吗?(因为父组件使用通过fetchSelectedItems
检索到的数据,所以父组件将重新渲染)。一个最小可复现示例会很好。 - dance2diedispatch({ type: 'SOME_ACTION_NAME' })
,这种情况仍然会发生。 - kriz