在 React Native 中使用 useEffect 和 AsyncStorage 传递令牌

pass token using useEffect and AsyncStorage in React Native

我开始使用 React Native,应该使用 AsyncStorage 而不是 LocalStorage

但是我无法在 useEffect 和 AsyncStorage 中处理异步,因为提取后的令牌集会发送所有内容。请帮助我

const [tkn, setTkn] = useState('')

const getData = async () => {
    try {
        const value = await AsyncStorage.getItem('token')
        if(value !== null) {
            setTkn(value)
        }
    } catch(e) {
        
    }
}

useEffect(() => {
    AsyncStorage.getItem('token').then((value) => {
        if (value) {
            setTkn(value)
        }
    });


    fetch('http://127.0.0.1:8000/home', {
        method: "GET",
        headers: {
            'Content-Type': 'application/json',
            Accept: 'application/json',
            'Token': tkn
        }
    })
        .then(function (response) {
            if (response.status >= 200 && response.status <= 299) {
                return response.json();
            } else {

            }
        })
        .then(funds => {
            ///
        }).catch(function (error) {
            
        })
}, [history])

我建议创建两种效果:一种从存储中获取令牌,一种进行 API 调用。

第一个效果将在组件安装时触发(将 [] 作为 useEffect 依赖项传递),第二个将在令牌更改时触发(将 [tkn] 传递给该 useEffect,并检查确保令牌具有非空值)。

这样,您就不必担心将所有异步逻辑链接在一起。

useEffect(() => {
    (async()=>{
      const token = await AsyncStorage.getItem('token');
      setTkn(token);
      const response= await fetch('http://127.0.0.1:8000/home', {
        method: "GET",
        headers: {
            'Content-Type': 'application/json',
            Accept: 'application/json',
            'Token': token
        }
      });
      if (response.status >= 200 && response.status <= 299) {
         const json= await response.json();
         //...
      }
    })();
}, [])