使用AsyncStorage更新状态 - React Native

时间:2018-05-18 13:52:03

标签: javascript react-native

当我想更新组件的状态时,我遇到了一个小问题componentWillMount我得到了这个错误。

enter image description here

代码是这样的:

export default class RouterComponent extends Component {

constructor(props) {
    super(props);
    this.state = {
        isLogin: null
    }
}

componentWillMount = async () => {
    AsyncStorage.getItem('@MyUserFireBase:key').then(response => {
        this.setState({ 'isLogin': true });
    }).done();
}



render() {

    return (
        <Router>
            <Stack key="root" hideNavBar>
                <Stack key="main">
                    <Scene key="login" initial={!this.state.isLogin} component={LoginForm} title="Login" />
                    <Scene key="employeeList" initial={this.state.isLogin} component={EmployeeList} title="Employee List" />
                </Stack>
            </Stack>
        </Router >
    )
}

}

我有超过3天的时间寻找解决方案,我找不到它。我究竟做错了什么? 谢谢你的时间

2 个答案:

答案 0 :(得分:2)

查看组件生命周期方法以帮助您解决问题:https://engineering.musefind.com/react-lifecycle-methods-how-and-when-to-use-them-2111a1b692b1

对于我的回答,试试这个:

componentDidMount = async () => {
    AsyncStorage.getItem('@MyUserFireBase:key').then(response => {
        this.setState({ 'isLogin': true });
    }).done();
}

此外,如果这不起作用,请尝试Update,因为您正在设置状态:

componentDidUpdate() =  {
        AsyncStorage.getItem('@MyUserFireBase:key').then(response => {
            this.setState({ 'isLogin': true });
        }).done();
    }

答案 1 :(得分:0)

使用componentDidMount()代替componentWillMount()并移除async()

componentDidMount() {
    AsyncStorage.getItem('@MyUserFireBase:key').then(response => {
        this.setState({ 'isLogin': true });
    }).done();
}
在反应16.3中,

componentWillMount也被标记为已弃用 https://reactjs.org/blog/2018/03/29/react-v-16-3.html(生命周期部分)