Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.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 在react native useEffect()中获取无效的钩子调用_Javascript_Reactjs_React Native_React Hooks - Fatal编程技术网

Javascript 在react native useEffect()中获取无效的钩子调用

Javascript 在react native useEffect()中获取无效的钩子调用,javascript,reactjs,react-native,react-hooks,Javascript,Reactjs,React Native,React Hooks,我想发布来自axios的数据,但收到无效的钩子调用错误。我在这里做错了什么。 这是我的密码 const Login = (props) => { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [error, setError] = useState(''); const [loading, setLoading] = useState(f

我想发布来自axios的数据,但收到无效的钩子调用错误。我在这里做错了什么。 这是我的密码

const Login = (props) => {
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');
  const [error, setError] = useState('');
  const [loading, setLoading] = useState(false);
  const [isLoading, setIsLoading] = useState(false);

  const onLoginSubmit = (event) => {
    event.preventDefault();
    const url = baseUrl + '/';
    const loginData = {
      email: email,
      password: password,
    };
    setIsLoading(true);
    useEffect(async () => {
      await axios
        .post(`${url}users/login`, loginData)
        .then((res) => {
          console.log(res.data);

          AsyncStorage.setItem('token', JSON.stringify(res.data.token));

          props.navigation.navigate('MainHome');
        })
        .catch((error) => {
          setError(error.res.data);
          setLoading(false);
          setIsLoading(false);
        });
    });
  };

必须在顶层调用钩子,请参见

不要在循环、条件、或嵌套函数中调用钩子


必须在顶层调用钩子,请参见

不要在循环、条件、或嵌套函数中调用钩子


好的,但我必须传递我的电子邮件状态和密码,你可以在onLoginSubmit函数上看到,它现在显示它的值从未被读取。如何解决它?只需将其移动到
useffect
范围,我已经更新了示例它没有给出任何响应,但当我使用类组件时,它工作正常,但我想将代码转换为功能组件。顺便说一句,谢谢你的时间好的,但我必须传递我的电子邮件状态和密码,你可以在onLoginSubmit函数上看到,它现在显示它的值从未被读取。如何解决它?只需将其移动到
useffect
范围,我已经更新了示例它没有给出任何响应,但当我使用类组件时,它工作正常,但我想将代码转换为功能组件。顺便说一句,谢谢你的时间不清楚你为什么需要在这里用钩子?为什么不在没有它的情况下进行Ajax调用呢?我做了,但它当时不起作用,这就是为什么我使用UseEffect,然后它仍然不起作用。我看不出有任何理由在这里使用useEffect。那么你能编辑我的代码吗?不。如果没有useEffect,Ajax调用无法工作,它仍然无法工作。你需要发布一个带有相关信息的新问题,但这一次,你甚至不清楚为什么需要在这里使用钩子?为什么不在没有它的情况下进行Ajax调用呢?我做了,但它当时不起作用,这就是为什么我使用UseEffect,然后它仍然不起作用。我看不出有任何理由在这里使用useEffect。那么你能编辑我的代码吗?不。如果没有useEffect,Ajax调用无法工作,它仍然无法工作。你需要发布一个包含相关信息的新问题,但这一次。
const Login = (props) => {
  const [email, setEmail] = useState("");
  const [password, setPassword] = useState("");
  const [error, setError] = useState("");
  const [loading, setLoading] = useState(false);
  const [isLoading, setIsLoading] = useState(false);

  useEffect(() => {
    const fetch = async () => {
      const url = baseUrl + "/";
      const loginData = {
        email: email,
        password: password,
      };

      await axios
        .post(`${url}users/login`, loginData)
        .then((res) => {
          console.log(res.data);

          AsyncStorage.setItem("token", JSON.stringify(res.data.token));

          props.navigation.navigate("MainHome");
        })
        .catch((error) => {
          setError(error.res.data);
          setLoading(false);
          setIsLoading(false);
        });
    };
    if (loading) {
      fetch();
    }
  }, [loading, email, password]);

  const onLoginSubmit = (event) => {
    event.preventDefault();
    setIsLoading(true);
  };
};