Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 在设置函数所依赖的状态后,调用使用useCallback定义的函数_React Native_React Hooks - Fatal编程技术网

React native 在设置函数所依赖的状态后,调用使用useCallback定义的函数

React native 在设置函数所依赖的状态后,调用使用useCallback定义的函数,react-native,react-hooks,React Native,React Hooks,我使用useCallback定义了一个函数,具体取决于状态。我想从另一个函数调用此函数,该函数在调用它之前更改状态,并使用useCallback进行定义。我该怎么办 例如: const refreshPage = useCallback( () => { if (state == '1') // action }, [state] ); const onChangeText = useCallback( (state

我使用useCallback定义了一个函数,具体取决于状态。我想从另一个函数调用此函数,该函数在调用它之前更改状态,并使用useCallback进行定义。我该怎么办

例如:

const refreshPage = useCallback(
    () => {
        if (state == '1')
            // action
    },
    [state]
);

const onChangeText = useCallback(
    (state) => {
        setState(state);
        refreshPage();
    },
    [refreshPage]
);
在这里,当调用onChangeText时,它将更新
refreshPage
的状态和定义,但不会使用我定义的新状态调用
refreshPage

我明确指出,这只是一个示例,我使用useEffect加载数据


谢谢

不会在更新状态下调用它的原因是
useCallback
将在组件重新加载以及调用
setState(state)
refreshPage()时更新函数的值,该组件尚未重新加载,并且仍在使用尚未更新的
refreshPage

一种方法是将状态传递到
refreshPage
并在那里使用它,而不是在
useCallback
上将更改的
state
上进行中继

const refreshPage = useCallback(
    // added state here 
    (state) => {
        if (state == '1')
            // action
    },
    [] // removed state  from here
);

const onChangeText = useCallback(
    (state) => {
        setState(state);
        refreshPage(state);
    },
    [refreshPage]
);

state
更改且
state
等于1时,您希望执行一些操作,最好在
useffect
中处理它,而不是
useCallback
,并且您根本不需要调用类似
refreshPage
的任何操作

const refreshPage = useCallback(() => {
   // load data here
},[]);

useEffect(() => {
  if (state == '1'){
    refreshPage()
  }
},[state]);

const onChangeText = useCallback((state) => {
     setState(state);
 },[]);

谢谢你的回答。我在示例中进行了简化。我在许多地方使用了
refreshPage
功能,这不仅仅取决于一种状态。我不希望此函数处理setStates函数。谢谢您的回答。我认为它可以工作,但我使用了useEffect函数来加载数据,我需要调用它一次:仅在页面加载时调用。我怎么能支持这两个呢?可能通过添加状态来检查页面是否已加载?我不确定您的意思,您可能需要更新您的问题并提供更多详细信息,例如加载数据的
useffect
。。。我在另一个答案中看到您的评论,您将在许多地方使用
refreshPage
。请检查我的更新答案以获得答案。我发现我们可以在一个类中使用多个useEffect函数,因此我可以使用一个函数加载页面,另一个函数取决于我的状态。您不能在类组件中使用
useEffect
,挂钩只能在功能组件或自定义挂钩中使用。是的,在功能组件中,您可以使用许多
useffect