Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.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本机异步存储不工作_Javascript_React Native_Async Await_Asyncstorage - Fatal编程技术网

Javascript react本机异步存储不工作

Javascript react本机异步存储不工作,javascript,react-native,async-await,asyncstorage,Javascript,React Native,Async Await,Asyncstorage,我正在尝试进行身份验证过程,以便我的App.js: import React, { Component } from "react"; import { AsyncStorage } from "react-native"; import Router from "./Router"; import ScanForm from "./components/ScanForm"; console.disableYellowBox = true; class App extends Compone

我正在尝试进行身份验证过程,以便我的App.js:

import React, { Component } from "react";
import { AsyncStorage } from "react-native";
import Router from "./Router";
import ScanForm from "./components/ScanForm";

console.disableYellowBox = true;

class App extends Component {
  state = {
    isLoggedIn: false
  };

  componentWillMount() {   
    const temp = AsyncStorage.getItem("operator");
    console.log(temp);

    if (temp !== undefined) {
      this.setState({ isLoggedIn: true });
    }
  }

  render() {
    if (this.state.isLoggedIn) {
      return <ScanForm />;
    } else {
      return <Router />;
    }
  }
}

export default App;
但是
console.log(temp)再次表示
未定义

为什么我不能使用
setItem
然后使用
getItem
获取数据

提前谢谢

异步存储是异步的:-)。在解析其返回的承诺之前,提交的值不可用。作为对这种不便的交换,它不会在编写过程中阻塞JavaScript线程

如果您尝试:

AsyncStorage.setItem("operator", "John").then(
   () => AsyncStorage.getItem("operator")
         .then((result)=>console.log(result))
)
你应该得到你所期望的。(这也可以使用异步/等待来完成,如中所示)

您并没有向我们展示如何将道具添加到应用程序中,但如果在
上更新值时使用
isLoggedIn
更新
的道具,则组件应相应更新。

异步存储是异步的:-)。在解析其返回的承诺之前,提交的值不可用。作为对这种不便的交换,它不会在编写过程中阻塞JavaScript线程

如果您尝试:

AsyncStorage.setItem("operator", "John").then(
   () => AsyncStorage.getItem("operator")
         .then((result)=>console.log(result))
)
你应该得到你所期望的。(这也可以使用异步/等待来完成,如中所示)


您并没有向我们展示如何将道具添加到应用程序中,但如果在
上更新值时使用
isLoggedIn
更新
的道具,则组件应相应更新。

如果找不到该项目,则该项目将
未定义我的意思是,当我使用
getItem
作为未声明的keyAh时!查看文档(上面链接)。getItem还返回一个承诺。更新答案…在您看来,检查用户是否登录react native的最佳方法是什么?而且,如果用户已经登录,请访问他的登录信息,正如我前面提到的,您不会向我们显示您的状态是如何存储的,或者您是如何为应用程序提供信息的;我会将该项存储在一个持久数据结构中,每当更新时,它都会重新呈现我的组件层次结构。在这种情况下,只需根据道具设置为注销还是用户数据呈现不同的UI即可。我通常使用Redux()和Redux react来存储数据。如果找不到该项,它将是未定义的我的意思是,当我使用
getItem
作为未声明的keyAh时!查看文档(上面链接)。getItem还返回一个承诺。更新答案…在您看来,检查用户是否登录react native的最佳方法是什么?而且,如果用户已经登录,请访问他的登录信息,正如我前面提到的,您不会向我们显示您的状态是如何存储的,或者您是如何为应用程序提供信息的;我会将该项存储在一个持久数据结构中,每当更新时,它都会重新呈现我的组件层次结构。在这种情况下,只需根据道具设置为注销还是用户数据呈现不同的UI即可。对于数据存储,我通常使用Redux()和Redux react。