Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Checkbox 根据react native中的复选框状态显示/隐藏组件_Checkbox_React Native_Onclick_Show Hide_Native Base - Fatal编程技术网

Checkbox 根据react native中的复选框状态显示/隐藏组件

Checkbox 根据react native中的复选框状态显示/隐藏组件,checkbox,react-native,onclick,show-hide,native-base,Checkbox,React Native,Onclick,Show Hide,Native Base,在设置页面中,我选中了一个复选框作为默认值。如果用户取消选中,那么应用程序中的所有图像都将被隐藏,用户将无法看到整个应用程序中的任何图像。 我想我需要控制复选框的状态(选中或未选中),在单击/按下复选框时更改该值,将该新值传递给所有应用程序(如何?),然后根据该值我可以决定是否显示图像 所以基本上,我的问题是访问该状态值,然后决定显示什么。 以下是我在设置页面中使用的代码: 设置页面: constructor(props) { super(props);

在设置页面中,我选中了一个复选框作为默认值。如果用户取消选中,那么应用程序中的所有图像都将被隐藏,用户将无法看到整个应用程序中的任何图像。 我想我需要控制复选框的状态(选中或未选中),在单击/按下复选框时更改该值,将该新值传递给所有应用程序(如何?),然后根据该值我可以决定是否显示图像

所以基本上,我的问题是访问该状态值,然后决定显示什么。 以下是我在设置页面中使用的代码:

设置页面:

     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>
 toggleStatus() {
        this.setState({
            status: !this.state.status
        });
        AsyncStorage.setItem("myCheckbox", "save me");

        console.log("in the toggle status function", this.state.status)
    }
我不断地进入控制台:

这段代码工作正常,每次我按下它时,它都会将status的值从false更改为true

更新尝试存储简单字符串而不等待 在“设置”页面中:

     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>
 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:我使用的是native base,我想知道我是否可以在复选框本身中执行onPress而不是touchableOpacity

您可以使用
异步存储作为全局
存储机制

在这种情况下,您可以访问应用程序任何其他部分中的变量

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
}
因此,每次你打开和关闭应用程序时,它的状态将与以前一样可用。您可以从
react native
导入if

import { AsyncStorage } from 'react-native';

您可能应该使用redux


谢谢。。不幸的是,我在异步存储中存储布尔值时遇到问题。。请查看问题中的更新。您可以保存一个字符串,并与之进行比较。谢谢。。我更新了我的问题,甚至在不等待的情况下存储一个简单字符串也无法正常工作。。请提供帮助请参见我上面的示例,了解如何使用
wait
,因为您直接使用了在使用之前需要等待的值
AsyncStorage
返回一个
Promise
而不是一个值,因此您必须使用
Wait
then
。我同意Ivan-这是一个全局状态选项的问题。如果需要保留状态,则应独立于UI交互(即,在应用程序加载时,将设置重新加载到状态)。