交换机中的异步存储错误未处理的承诺拒绝

时间:2019-02-21 23:39:22

标签: react-native

我是新来的本地人,现在我遇到了问题。 我正在尝试使用异步存储将数据保存到本地存储中,我正在关注此tutorial

它工作正常,但在我的切换代码中却没有。 这是我的构造函数

 constructor(props) {
    super(props)         
    this.state = {prevBtn: undefined}
    this.onPrevValueChange = this.onPrevValueChange.bind(this);
 }

然后我将其放入我的didMount中:

componentDidMount() {
        this.getQuestionnaire();
        AsyncStorage.getItem('prevBtn').then((value) => this.setState({ 'prevBtn': value }));
    }

设置更改后的值:

onPrevValueChange = (value) =>  {
    AsyncStorage.setItem('prevBtn', value);
    this.setState({ prevBtn: value  });
}

和渲染方法:

render(){
    const {}
    return(
        <Switch 
             value={prevBtn}
             backgroundActive={'red'}
             onValueChange={this.onPrevValueChange}  
        /> 
    );
}

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

setState中带有componentDidMount的问题,当您使用单引号`设置prevBtn的值时,其行为类似于String state,按如下方式使用它:

componentDidMount() {
        this.getQuestionnaire();
        AsyncStorage.getItem('prevBtn').then((value) => this.setState({ prevBtn: value }));
    }

render中,您正在直接使用prevBtn,将其用作this.state.prevBtn

render(){
    const {}
    return(
        <Switch 
             value={this.state.prevBtn}
             backgroundActive={'red'}
             onValueChange={this.onPrevValueChange}  
        /> 
    );
}

答案 1 :(得分:0)

您需要将componentDidMount更改为此:

请注意,AsyncStorage.getItem始终返回字符串,使用前必须将其转换为布尔值。而且,正如另一位评论者所指出的那样,您不能在state属性周围加上引号。

componentDidMount() {
  this.getQuestionnaire();
  AsyncStorage.getItem('prevBtn').then((value) => {
    value === 'true' 
      ? this.setState({ prevBtn: true })
      : this.setState({ prevBtn: false })
  });
}