【问题标题】:Cannot call function only once in React Native?不能在 React Native 中只调用一次函数?
【发布时间】:2020-10-25 08:51:31
【问题描述】:

我有一个带有 GraphQL 服务器的 React Native 项目。我正在使用 Apollo Client 从我的 API 获取数据。我创建了这个简单的组件,它从路由参数中获取注册所需的所有数据(形成逐步注册)并进行突变以创建新商店。

export default function AuthRegisterStore({ navigation, route }) {
  const [
    register,
    { loading: validating, error: validationError, data: returnData },
  ] = useMutation(REGISTER, { onError: (e) => Alert.alert(String(e)) });

  const handleRegistration = () => {
    register({
      variables: {
        username: route.params.username,
        password: route.params.password,
        latitude: route.params.latitude,
        longitude: route.params.longitude,
      },
    });
  };

  handleRegistration()

  if (validating) {
    return <Loader />;
  }

  if (validationError) {
    return (
      <View style={styles.container}>
        <Text>Error</Text>
      </View>
    );
  }

  if (returnData) {
    navigation.navigate("Login", { message: "Te logueaste!" });
  }

  return null;
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
});

问题是函数handleRegistration()被一次又一次地调用,导致无限循环。我试过使用useEffect(),但由于某种原因它不会进行 API 调用。 我错过了什么?

【问题讨论】:

    标签: javascript reactjs react-native expo apollo


    【解决方案1】:

    是的 - handleRegistration() 现在设置为在每次重新渲染时运行。如果你使用了useEffect,你可能没有包含依赖数组(我稍后会告诉你),这也会导致它在每次重新渲染时运行。试试这个:

    useEffect(() => {
      handleRegistration()
    }, [])
    

    注意useEffect 中的空数组。这告诉 react 只运行一次。你可以省略它(就像你可能已经做过的那样),它告诉 react 在每次组件重新渲染时运行它。或者您可以将参数传递到数组中,当这些特定参数发生变化时,react 将观察并运行。

    【讨论】:

    • 这么小的差异...谢谢:)!
    猜你喜欢
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 2018-07-13
    • 2012-09-24
    • 2020-12-07
    • 2022-08-07
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多