我是新来的本地人,现在我遇到了问题。 我正在尝试使用异步存储将数据保存到本地存储中,我正在关注此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}
/>
);
}
有人可以帮忙吗?
答案 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 })
});
}