繁体   English   中英

调度完成后,如何从 useSelector 获取 state?

[英]How do I get the state from useSelector after dispatch is done?

我有一个 FormCheck 组件,它在 onChange 事件上调用 handleChange function。 任务:更改复选框的 state,并使用新的 state 向服务器发送请求。 问题是提交是稍后完成的,即在提交之前执行了getSelectedCategories function。

const data = useSelector((state) => state.products);
const boxes = getBoxes(data);


const handleChange = (id) => {
    dispatch(setFilterCategory(id));
    const selectedCategories = getSelectedCategories(data);
    console.log(selectedCategories); // This is done before the dispatch while the state changes
    dispatch(fetchProducts(selectedCategories); 
};

return (
  {boxes.map(item => {
     return <FormCheck label={item.value} checked={item.isChecked} onChange={() => handleChange(item.id)}
  })}
);

这就是useEffect()的用途:

const data = useSelector((state) => state.products);
const selectedCategories = getSelectedCategories(data);

const handleChange = (id) => {
    dispatch(setFilterCategory(id));
};

// is executed whenever selectedCategories changes
useEffect(() => {
  dispatch(fetchProducts(selectedCategories);
}, [selectedCategories])

根据定义,在 function 组件的主体中定义的回调只能访问 state、props 和在组件呈现时创建回调时存在的值。

如果您正在调度一个操作,那么该代码不可能访问下一行的Redux state(甚至是 React 状态)。

如果您确实需要立即访问新的 Redux state,您可以通过有权访问getState的 thunk 来实现:

const updateCategoryAndFetch = (category) => {
  return (dispatch, getState) => {
      dispatch(setFilterCategory(id));
      const selectedCategories = getSelectedCategories(getState());
    dispatch(fetchProducts(selectedCategories)
  }
}

// later, in the component:

const handleChange = (id) => {
  dispatch(updateCategoryAndFetch(id));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM