Я использую ловушку useDispatch (из Redux) в обратном вызове onSelect
в компоненте Tree (из библиотеки Ant):
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, но это решение - для предотвращения повторного рендеринга дочерних компонентов, а не родителей.