我正在处理项目列表,我想设置一个选定的项目ID,然后使用该ID提取选定的项目。

我正在使用可以工作的reducers更新上下文的状态,但是在引用状态的属性时,它看不到更新后的值。

Component.js

  useEffect(() => {
    setSelectedId(5);
    getSelectedItem();
  }, []);


Context.js

  const initialState = {
    selectedId: 0,
  };

  const [state, dispatch] = useReducer(ItemReducer, initialState);

  const setSelectedId = id => dispatch({ type: SET_SELECTED_ID, payload: id });

  // HERE IT THINKS 'state.selectedId' IS 0
  const getSelectedItem = async () => {
     const selectedItem = await fetch(url + state.selectedId);
  };




Chrome开发工具显示选定的id属性已更新为5,但getSelectedItem函数将“ selectedId”视为0而不是5。

这可能是一个简单的问题,任何帮助将不胜感激。

谢谢

最佳答案

您可以将getSelectedItem();移到依赖于selectedItemId的自己的useEffect中,这样,只有在设置selectedId的值后,它才会执行getSelectedItem。

useEffect(() => {
   if(selectedId) getSelectedItem();
}, [selectedId]);

关于javascript - react 上下文-设置状态然后直接引用它?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59570501/

10-13 05:58