根据本机复选框状态显示/隐藏组件
Show/ Hide components based on the checkbox state in react native
在设置页面中,我选中了一个复选框作为默认值。如果用户取消选中它,则应用程序中的所有图像都将被隐藏,用户将无法在整个应用程序中看到任何图像。
我想我需要控制复选框的状态(选中或不选中),在单击/按下复选框时更改该值,将该新值传递给所有应用程序(HOW?) , 然后根据这个值我可以决定是否显示图像。
基本上,我的问题是访问该状态值,然后决定显示什么。
这是我在设置页面中使用的代码:
设置页面:
constructor(props) {
super(props);
this.state ={
status:false
}
};
toggleStatus(){
this.setState({
status:!this.state.status
});
//I even hardcoded it to false but i keep getting null
AsyncStorage.setItem('myCheckbox',JSON.stringify(false));
//AsyncStorage.setItem('myCheckbox',JSON.stringify(this.state.status));
}
...
render() {
return(
<TouchableOpacity onPress={()=>this.toggleStatus()}>
<Text>
press me to change state
</Text>
</TouchableOpacity>
第二页:我需要访问存储在 asyncStorage 中的值
componentDidMount() {
const value = AsyncStorage.getItem('myCheckbox', (value) => {
JSON.parse(value)
console.log("my check box value ", value)
});
}
我不断进入控制台:
这段代码工作正常,每次我按下它时它都会将状态值从 false 更改为 true
UPDATE 试图在不等待的情况下存储一个简单的字符串
在设置页面中:
toggleStatus() {
this.setState({
status: !this.state.status
});
AsyncStorage.setItem("myCheckbox", "save me");
console.log("in the toggle status function", this.state.status)
}
在我使用的页面中:
componentDidMount(){
let value = AsyncStorage.getItem("myCheckbox")
console.log('in the other page i get ', value)
}
然后我进入了控制台:
怎么了?!
PS:我正在使用本机基础,我想知道我是否可以在复选框本身而不是 touchableOpacity 中执行 onPress
您可以使用 AsyncStorage
作为全局 storage
机制。
在这种情况下,可以在应用的任何其他部分访问变量。
try {
const value = await AsyncStorage.getItem('myCheckbox');
if (value !== null){
console.log(value);
}
} catch (error) {
// Error retrieving data
}
并将其保存在 toggleStatus
您可以使用:
try {
await AsyncStorage.setItem('myCheckbox', 'myValue');
} catch (error) {
// Error saving data
}
所以每次您打开和关闭应用程序时,它都会像以前一样可用。你可以导入 if from react-native
.
import { AsyncStorage } from 'react-native';
你或许应该使用 redux
在设置页面中,我选中了一个复选框作为默认值。如果用户取消选中它,则应用程序中的所有图像都将被隐藏,用户将无法在整个应用程序中看到任何图像。 我想我需要控制复选框的状态(选中或不选中),在单击/按下复选框时更改该值,将该新值传递给所有应用程序(HOW?) , 然后根据这个值我可以决定是否显示图像。
基本上,我的问题是访问该状态值,然后决定显示什么。 这是我在设置页面中使用的代码:
设置页面:
constructor(props) {
super(props);
this.state ={
status:false
}
};
toggleStatus(){
this.setState({
status:!this.state.status
});
//I even hardcoded it to false but i keep getting null
AsyncStorage.setItem('myCheckbox',JSON.stringify(false));
//AsyncStorage.setItem('myCheckbox',JSON.stringify(this.state.status));
}
...
render() {
return(
<TouchableOpacity onPress={()=>this.toggleStatus()}>
<Text>
press me to change state
</Text>
</TouchableOpacity>
第二页:我需要访问存储在 asyncStorage 中的值
componentDidMount() {
const value = AsyncStorage.getItem('myCheckbox', (value) => {
JSON.parse(value)
console.log("my check box value ", value)
});
}
我不断进入控制台:
这段代码工作正常,每次我按下它时它都会将状态值从 false 更改为 true
UPDATE 试图在不等待的情况下存储一个简单的字符串 在设置页面中:
toggleStatus() {
this.setState({
status: !this.state.status
});
AsyncStorage.setItem("myCheckbox", "save me");
console.log("in the toggle status function", this.state.status)
}
在我使用的页面中:
componentDidMount(){
let value = AsyncStorage.getItem("myCheckbox")
console.log('in the other page i get ', value)
}
然后我进入了控制台:
PS:我正在使用本机基础,我想知道我是否可以在复选框本身而不是 touchableOpacity 中执行 onPress
您可以使用 AsyncStorage
作为全局 storage
机制。
在这种情况下,可以在应用的任何其他部分访问变量。
try {
const value = await AsyncStorage.getItem('myCheckbox');
if (value !== null){
console.log(value);
}
} catch (error) {
// Error retrieving data
}
并将其保存在 toggleStatus
您可以使用:
try {
await AsyncStorage.setItem('myCheckbox', 'myValue');
} catch (error) {
// Error saving data
}
所以每次您打开和关闭应用程序时,它都会像以前一样可用。你可以导入 if from react-native
.
import { AsyncStorage } from 'react-native';
你或许应该使用 redux