Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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
Javascript 我可以在reactjs类之外声明一个全局变量吗_Javascript_Reactjs - Fatal编程技术网

Javascript 我可以在reactjs类之外声明一个全局变量吗

Javascript 我可以在reactjs类之外声明一个全局变量吗,javascript,reactjs,Javascript,Reactjs,现在我知道我不能使用push更新状态中的'opraray'数组 所以我在想,如果我在类外声明一个变量并更新该数组,然后更新内部状态“opraray”,会怎么样 var array= [] class Body extends Component { state= { input: '', oprStatus: false, check: false, count: 0, oprArray: null } } 这并不能解决问题,因为您仍然需要改变状态,而不是设置新状态。第一次在

现在我知道我不能使用push更新状态中的'opraray'数组 所以我在想,如果我在类外声明一个变量并更新该数组,然后更新内部状态“opraray”,会怎么样

var array= []



class Body extends Component {

state= {
 input: '',
 oprStatus: false,
 check: false,
 count: 0,
 oprArray: null
} }

这并不能解决问题,因为您仍然需要改变状态,而不是设置新状态。第一次在状态中设置
opraray:array
后,状态和全局
array
变量都指向同一个数组。下一次,
push
将直接修改状态-这是一个带有React状态的no-no

要将新项目添加到
oprArray
,请执行以下操作:

array.push(2);
this.setState({
 oprArray: array
)}
即:

  • 使用
    setState
    的回调形式,这是在基于现有状态(先前的
    opraray
    内容)修改状态(使用新条目
    2
    )时所必需的

  • 通过扩展表示法,使用附加项创建一个新数组

  • 实例:

    const{Component}=React;
    类主体扩展组件{
    状态={
    输入:“”,
    状态:错误,
    检查:错误,
    计数:0,
    opraray:null
    };
    componentDidMount(){
    //由于您的状态以“null”开头,我假设您收到了初始数据
    //通过ajax或类似方式;此处模拟超时
    设置超时(()=>{
    this.setState({opraray:[0,1]});//初始数据不基于现有状态
    //现在设置以后获取更多数据
    设置超时(()=>{
    //附加数据
    this.setState(({opraray})=>({opraray:[…opraray,2]}));
    }, 800);
    }, 800);
    }
    render(){
    const{opraray}=this.state;
    返回(
    oprArray:{oprArray?oprArray.join(“,”:(无)”}
    );
    }
    }
    render(,document.getElementById(“根”))
    
    这并不能解决问题,因为您仍然在改变状态,而不是设置新状态。第一次在状态中设置
    opraray:array
    后,状态和全局
    array
    变量都指向同一个数组。下一次,
    push
    将直接修改状态-这是一个带有React状态的no-no

    要将新项目添加到
    oprArray
    ,请执行以下操作:

    array.push(2);
    this.setState({
     oprArray: array
    )}
    
    即:

  • 使用
    setState
    的回调形式,这是在基于现有状态(先前的
    opraray
    内容)修改状态(使用新条目
    2
    )时所必需的

  • 通过扩展表示法,使用附加项创建一个新数组

  • 实例:

    const{Component}=React;
    类主体扩展组件{
    状态={
    输入:“”,
    状态:错误,
    检查:错误,
    计数:0,
    opraray:null
    };
    componentDidMount(){
    //由于您的状态以“null”开头,我假设您收到了初始数据
    //通过ajax或类似方式;此处模拟超时
    设置超时(()=>{
    this.setState({opraray:[0,1]});//初始数据不基于现有状态
    //现在设置以后获取更多数据
    设置超时(()=>{
    //附加数据
    this.setState(({opraray})=>({opraray:[…opraray,2]}));
    }, 800);
    }, 800);
    }
    render(){
    const{opraray}=this.state;
    返回(
    oprArray:{oprArray?oprArray.join(“,”:(无)”}
    );
    }
    }
    render(,document.getElementById(“根”))