【发布时间】:2022-01-23 07:32:12
【问题描述】:
我正在尝试更新状态以在进行异步调用时显示 ActivityIndicator。
确保IsLoading(true) 和setResult(null) 在异步调用之前发生的正确方法是什么?
在下面的代码中,setIsLoading 在异步调用之前实际上并未更新,因此 ActivityIndicator 不会出现在 UI 上。我意识到为什么会出现这种情况 (here) 我只是不知道在进行异步调用之前实际确保 ActivityIndicator 显示的推荐方法。
请帮忙。在反应中做到这一点的正确方法是什么?
const MyScreen = () => {
const [isLoading, setIsLoading] = useState(false);
const [result, setResult] = useState(null);
const handlePress = async () => {
setResult(null); // reset result
setIsLoading(true); // show activity indicator
const result = await MyAsyncFunc(); // native modules function
setResult(result);
setIsLoading(false); // turn off activity indicator
}
return (
<View style={styles.container}>
<MyButton title="Run" handlePress={handlePress} disabled={isLoading} />
{isLoading && <ActivityIndicator size="large" color="#00ff00" />}
<Text>{result}</Text>
</View>
)
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center'
},
})
【问题讨论】:
标签: reactjs react-native react-hooks react-state react-async