反应本机中的AsyncStorage.getItem无法正常工作

时间:2018-10-23 09:33:20

标签: javascript react-native asyncstorage

我正在使用AsyncStorage.setItem在服务器上设置数据,并尝试使用AsyncStorage.getItem在另一个屏幕中访问该值。 1.我无法在token中设置AsyncStorage。 2.如何在异步存储中设置多个值,比如说我想从服务器响应中user_id与此token一起设置?

onPressRegister(){

            fetch('http://192.168.1.7:3000/users/registration',{
                method:'POST',
                headers:{
                    'Accept': 'applictaion/json',
                    'Content-Type': 'application/json',

                },
                body:JSON.stringify({
           contact:this.state.contact,
                     password:this.state.password,
                })
            })
            .then((response) => response.json())
            .then((responseData) =>
            {
                 this.setState({
                     signup: responseData
                 });
                 setTimeout(() => {
                    Actions.firstScreen();
                }, 2300);

        AsyncStorage.setItem('token' ,this.state.signup.token);
            });

    }

我正在这样获取

  componentDidMount(){
    AsyncStorage.getItem('token').then((userid) =>{
    this.setState({'userid': userid});
    console.log(userid);
    });
}

但是我看不到console内的结果。 AsyncStorage.setItem中有任何错误吗?此外,服务器响应看起来像这样

{ error: 0,
  data: 'User registered Successfully',
  userData:
   { pwd: 'vgh',
     phone_no: '5',
     user_name: '',
     status: 1,
     date: 2018-10-23T09:23:53.671Z },
  user_id: [  { user_id: 5 } ],
  token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' }

我还希望在user_id中设置AsyncStorage。这该怎么做?

2 个答案:

答案 0 :(得分:1)

U可以使用asyncawait从AsyncStorage访问值。

async componentDidMount(){
    let token = await AsyncStorage.getItem('token');
    console.log(token);
}

答案 1 :(得分:0)

我认为您的问题来自setState的async属性。

如果您的responseData是一个对象(请使用console.log(typeof responseData)对其进行测试, 试试吧:

df

实际上,setState方法需要一段时间才能生效。当是最佳时机,而不是在代码中写入状态时,React native会设置状态(异步函数)。它不像变量集。

要知道的另一件事是何时调用getItem。如果仅在setItem之后(甚至在导航到另一个屏幕之后)调用它,则可能尚未设置(相同的异步原因)。然后,您可以这样做,以确保已设置您的商品:

cur1.rate  <- merge(df, taux_change_vers_EUR, by.x="currency1", by.y="V1", all.y=FALSE)
cur2.rate  <- merge(cur1.rate, taux_change_vers_EUR, by.x="currency2", by.y="V1", all.y=FALSE)
result <- cur2.rate
result$amount1.eur <- result$amount1*result$V2.x
result$amount2.eur <- result$amount2*result$V2.y
result
  currency2 currency1 amount1 amount2    V2.x    V2.y amount1.eur amount2.eur
1       CNY       EUR    1654    6876 1.00000 6.92256    1654.000  47599.5226
2       HKD       CAD     736     354 1.48836 7.83296    1095.433   2772.8678
3       HKD       EUR   68797      63 1.00000 7.83296   68797.000    493.4765
4       HKD       USD    6546     687 1.14720 7.83296    7509.571   5381.2435

这是在setItem方法末尾调用的回调