React native 在设置函数所依赖的状态后,调用使用useCallback定义的函数
我使用useCallback定义了一个函数,具体取决于状态。我想从另一个函数调用此函数,该函数在调用它之前更改状态,并使用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
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