为什么React useState依赖项在回调中为空?

时间:2020-09-28 22:58:55

标签: reactjs react-hooks

useCallback中使用的依赖项以null的形式出现,即使在useCallback之外调用它时已填充该依赖项。我什至尝试删除useCallback,并在常规函数中使用了data变量。它仍然为空。知道为什么会这样吗?

const [data, setData] = useState(null);

useEffect(() => { //on page load
  const data = fetchData();
  setData(data)
}, []);

const func = useCallback(async (payload) => {
    console.debug(data); //null
    if (data) //call api with payload
}, [data]);

console.debug(data); //correct population of data

return <MyComponent onSubmit={func} /> //passed to and called from second child down from here

2 个答案:

答案 0 :(得分:0)

在所有情况下都可以使用此方法的唯一方法是将func()移到使用它的孩子那里。而且由于data在父级和子级中都使用,因此我将其传递给子级,并在运行func()后将对它的所有修改推回父级,以便修改后的data set()在父级中。

答案 1 :(得分:0)

像这样

  1. 将数据作为useState中的参数传递给函数。没关系,我没有数据。所以我使用了'abc'。

    useEffect(() => { //on page load
     const data = 'abc';
     setData(data)
     func(data)
      }, []);
    
  2. 下一步将数据作为函数中的参数。

     const func = (data) => {
         console.log(data); //now it will have abc
     };