Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.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
Javascript 重新定义的钩子比上一次渲染时多,只在一个组件中发生?_Javascript_Reactjs_React Native_Expo - Fatal编程技术网

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;
  }