我是本地反应的新手,现在我遇到了问题。 我正在尝试使用异步存储将数据保存到本地存储中,我正在按照本教程进行操作,
它工作正常,但不在我的开关代码中。 这是我的构造函数
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}
/>
);
}
有人可以帮忙吗?
componentDidMount
中setState
的问题,当您使用单引号为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}
/>
);
}
您需要将组件DidMount更改为:
请注意,AsyncStorage.getItem
总是返回一个字符串,但在使用它之前,您必须将其转换为布尔值。 正如另一位评论者指出的那样,你不能在国有财产周围引用。
componentDidMount() {
this.getQuestionnaire();
AsyncStorage.getItem('prevBtn').then((value) => {
value === 'true'
? this.setState({ prevBtn: true })
: this.setState({ prevBtn: false })
});
}