【发布时间】:2020-06-20 05:59:51
【问题描述】:
我在这个屏幕上的 react 本机应用程序中收到 Rendered more hooks than during the previous render 错误:
const HomeScreen = props => {
const [refreshing, setRefreshing] = useState(false);
if (props.data.loading) { // error shows its located here
return <Text>Loading...</Text>;
}
const onRefresh = useCallback(() => {
setRefreshing(true);
wait(2000).then(() => setRefreshing(false));
}, [refreshing]);
return (
<View style={styles.container}>
<FlatList
data={props.data.sample}
renderItem={({item}) => <Card {...item} user={props.data.user} />}
keyExtractor={item => item._id}
refreshControl={
<RefreshControl refreshing={refreshing} onRefresh={onRefresh} />
}
/>
</View>
);
};
但是当我将useState 移动到 if 语句下方时:
const HomeScreen = props => {
if (props.data.loading) { // error shows its located here
return <Text>Loading...</Text>;
}
// moved here, change in the order of hooks...
const [refreshing, setRefreshing] = useState(false);
const onRefresh = useCallback(() => {
setRefreshing(true);
wait(2000).then(() => setRefreshing(false));
}, [refreshing]);
我收到警告:
Warning: React has detected a change in the order of Hooks called by "HomeScreen". This will lead to bugs and errors if not fixed...
当我的应用程序热重新加载时,我收到此错误,但是当我关闭警告然后强制重新加载时,它不会出现。我只是想确保将其移到 if 语句下方是可以的。
另外,我不知道为什么移动useState会修复重新渲染的原始错误消息?
【问题讨论】:
标签: reactjs react-native react-hooks react-native-ios