首页 > 解决方案 > TypeError:destroy is not a function in useEffect 由 async/await 引起

问题描述

我的 React Native捆绑(0.61.5)了一个16.9.0React,它不是最新的。在应用程序useEffect中返回错误TypeError: distroy is not a function

在此处输入图像描述

这是useEffect代码:

useEffect(async () => {
    try {
      let url = `${GLOBAL.BASE_URL}/api/events/active?group_id=${encodeURIComponent(group_id)}&_role=${role}&_grpmember_id=${grpmember_id}&_group_id=${encodeURIComponent(group_id)}&_device_id=${encodeURIComponent(device_id)}`;
      let res =  await fetch(url, {
        method: "GET",
          headers: {
          'Accept': 'application/json, text/plain',
          'Content-Type': 'application/json',   
          "x-auth-token": token.password,
          "x-auth-secret": token.username,
        }
      });
      //check secret token 
      let secret = res.headers.get("x-auth-secret");
      let jwttoken = res.headers.get("x-auth-token");
      res = await res.json();
      if (secret && jwttoken && (typeof secret !== 'undefined') && (typeof jwttoken !== 'undefined') && secret !== null && jwttoken !== null) {
        if(await helper.updateJwtToken(secret, jwttoken)) {
          setToken({password: jwttoken, username: secret});
          authVal.updateToken(token); //set state token in App.js
        };
      } else if (jwttoken === "route to verfi") {
        navigation.navigate("Verif1", {cell: res.cell, cell_country_code: res.cell_country_code, existing_user:true});      
      };
      //update state
      var ordered_data = eventsByDate(res);
      setActiveEvents(ordered_data);

    } catch (err) {
      console.log("Error in event refreshing data ", err);     
    };
  })

根据在线帖子,问题很可能是由async/await方法中的几个引起的。在我看来,更新的版本React应该可以解决这个问题。我应该升级到什么版本的反应?或者有其他解决方法而不是版本升级。

标签: reactjsreact-native

解决方案


我认为你应该删除 async 关键字并只写useEffect(() => {...});最好的方法是创建一个单独的函数并使用它:

const doStuff = async () => {...};
useEffect(() => { doStuff(); });

推荐阅读