Reactjs useEffect功能中的警告,即使我没有在屏幕中使用它

Reactjs useEffect功能中的警告,即使我没有在屏幕中使用它,reactjs,react-native,Reactjs,React Native,我登录时收到一条警告消息。如果我对setIsLoading(true)进行注释,那么它就正常工作了。我想我的状态是在安装组件之前更新的。我这里不使用useEffect函数,它只是直接点击按钮。如何清除我的警告 警告:无法对已卸载的组件执行React状态更新。这是一个no-op,但它表示应用程序中存在内存泄漏。要修复此问题,请取消useEffect清理函数中的所有订阅和异步任务 const SignInScreen = () => { const [isLoading, setIsLoadi

我登录时收到一条警告消息。如果我对setIsLoading(true)进行注释,那么它就正常工作了。我想我的状态是在安装组件之前更新的。我这里不使用useEffect函数,它只是直接点击按钮。如何清除我的警告

警告:无法对已卸载的组件执行React状态更新。这是一个no-op,但它表示应用程序中存在内存泄漏。要修复此问题,请取消useEffect清理函数中的所有订阅和异步任务

const SignInScreen = () => {
const [isLoading, setIsLoading] = useState(false);

  const authHandler = async () => {
    setIsLoading(true);
    await dispatch(AuthReducer.signIn(uname, pwd));
    setIsLoading(false);
  };
};
JSX


你应该清理他们所谓的订阅。 在您的情况下,可能是这样的:

  useEffect(() => {
    let mounted = true

    const authHandler = async () => {
     if (mounted) {
      setIsLoading(true)
      await dispatch(AuthReducer.signIn(uname, pwd))
      setIsLoading(false)
     } 
    }

    authHandler()

    return () => mounted = false;

  }, []);

请阅读此处以供参考:
.

不使用useEffect钩子就可以处理此问题,因为authHandler正在调用button onPress事件。
export const signIn = (username, password) => async (dispatch) => {
  try {
    const response1 = await axios.post("/Mobile/mlogin", {uname,pwd});
 const response2 = await axios.post("...............);
 const response3 = await axios.get(...............);
catch(err)
{}
};
  useEffect(() => {
    let mounted = true

    const authHandler = async () => {
     if (mounted) {
      setIsLoading(true)
      await dispatch(AuthReducer.signIn(uname, pwd))
      setIsLoading(false)
     } 
    }

    authHandler()

    return () => mounted = false;

  }, []);