【发布时间】:2017-06-01 23:25:48
【问题描述】:
我一直面临原生基本复选框和 AsynStorage 的一些问题。事实上,AsynStorage 默认只接受字符串,但也可以存储布尔变量,我尝试使用该方法,但每次都存储一个字符串。 虽然复选框只接受布尔变量并在我尝试使用字符串时抛出警告并且它不显示复选框的先前状态(选中或未选中)。 所以,我决定使用 TouchbleOpacity 制作自己的复选框。那么你们知道如何制作吗? 这是我想要达到的结果:
因此,目的是制作一个复选框设置页面,该页面控制另一个页面中文本的样式,并获取上次左侧的复选框,例如:如果我选中它,我会更改页面并继续再次回到设置页面,我需要找到它已选中(表示之前的状态) 代码是 在设置页面中:
toggleStatus() {
this.setState({
status: !this.state.status
});
AsyncStorage.setItem("myCheckbox",JSON.stringify(this.state.status));
}
// to get the previous status stored in the AsyncStorage
componentWillMount(){
AsyncStorage.getItem('myCheckbox').then((value) => {
this.setState({
status: value
});
if (this.state.status == "false") {
this.setState({
check: false
});
}
else if (this.state.status == "true") {
this.setState({
check: true
});
}
if (this.state.status == null) {
this.setState({
check: false
});
}
});
}
render {
return(
...
<CheckBox
onPress={() => { this.toggleStatus() }
checked={ this.state.check }/>
)}
在其他页面:
componentDidMount(){
AsyncStorage.getItem('myCheckbox').then((value) => {
JSON.parse(value)
this.setState({
status: value
});
});
}
【问题讨论】:
-
我认为最好看看您从 AsyncStorage 存储/检索数据的方式,而不是为复选框重新发明轮子。我将通过
JSON.stringify(myVal)存储数据,并使用JSON.parse(fromStorage)检索数据——这样您就可以存储复杂的对象并维护类型。
标签: button checkbox react-native state checked