Javascript 重新定义的钩子比上一次渲染时多,只在一个组件中发生?
在名为Javascript 重新定义的钩子比上一次渲染时多,只在一个组件中发生?,javascript,reactjs,react-native,expo,Javascript,Reactjs,React Native,Expo,在名为Turnos的react本机组件中,我试图使用useffect()钩子从异步存储中获取一个项: export default function Turnos({ navigation }: any) { const { loading, error, data, refetch } = useQuery(GET_TURNS, { onError: () => Alert.alert( "Error", &qu
Turnos
的react本机组件中,我试图使用useffect()钩子从异步存储中获取一个项:
export default function Turnos({ navigation }: any) {
const { loading, error, data, refetch } = useQuery(GET_TURNS, {
onError: () =>
Alert.alert(
"Error",
"Hubo un error al conectarse. Por favor, verificá tu conexión a internet"
),
pollInterval: 3000,
fetchPolicy: "no-cache",
});
if (loading) {
return <Loader />;
}
if (error) {
Alert.alert(
"Error",
"Hubo un error al conectarse. Por favor, verificá tu conexión a internet"
);
return null;
}
const myTurns = data.getTurnsForUser.filter(
(e: any) => e.fullfilled === false
);
const getUserId = async () => {
await AsyncStorage.getItem("USER_ID").then((res) => {
console.log(res);
});
};
useEffect(() => {
getUserId();
}, []);
return (
<View style={styles.container}>
<FlatList
contentContainerStyle={styles.turnList}
style={styles.turnList}
data={myTurns}
renderItem={(turn) => (
<Turno
title={turn.item.store.name}
peopleQueue={turn.item.store.turns.length} // how many people are in the queue
></Turno>
)}
keyExtractor={(turn) => turn.id}
refreshControl={
<RefreshControl
refreshing={false}
onRefresh={() => {
try {
refetch();
} catch (error) {
Alert.alert("Error", String(error));
}
}}
></RefreshControl>
}
ListEmptyComponent={
<View style={styles.listEmptyContainer}>
<PrimaryText>No hay turnos por ahora...</PrimaryText>
</View>
}
></FlatList>
</View>
);
}
我做错了什么?我意识到错误是什么:永远不要在条件语句内部或之后调用useffect()
钩子,就像我之前所做的那样:
if (loading) {
return <Loader />;
}
if (error) {
Alert.alert(
"Error",
"Hubo un error al conectarse. Por favor, verificá tu conexión a internet"
);
return null;
}
if(加载){
返回;
}
如果(错误){
警惕,警惕(
“错误”,
“在互联网上,我们可以通过互联网来证实我们的错误”
);
返回null;
}
只需将其放在顶部即可修复。您的问题缺少错误。它在标题中,我刚刚编辑并澄清了它。如果您回答了自己的问题,请关闭它,好吗?我想将它留在这里,以防有人遇到与Messine相同的问题,因为此平台中没有任何解决方案
if (loading) {
return <Loader />;
}
if (error) {
Alert.alert(
"Error",
"Hubo un error al conectarse. Por favor, verificá tu conexión a internet"
);
return null;
}