Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.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 为什么在react组件中更改mobx可观察状态变量并不像react中那样引发不变的冲突错误_Javascript_Reactjs_Mobx_React Dom_Mobx React - Fatal编程技术网

Javascript 为什么在react组件中更改mobx可观察状态变量并不像react中那样引发不变的冲突错误

Javascript 为什么在react组件中更改mobx可观察状态变量并不像react中那样引发不变的冲突错误,javascript,reactjs,mobx,react-dom,mobx-react,Javascript,Reactjs,Mobx,React Dom,Mobx React,为什么在react组件中更改mobx可观察状态变量并不像react中那样引发不变的冲突错误 案例1: 但是,下面的代码段也应该抛出相同的错误,对吗?但事实并非如此 案例2: import React, { Component } from "react"; import { render } from "react-dom"; class Counter extends React.Component { state = { count: 0 }; render() {

为什么在react组件中更改mobx可观察状态变量并不像react中那样引发不变的冲突错误

案例1: 但是,下面的代码段也应该抛出相同的错误,对吗?但事实并非如此

案例2:
import React, { Component } from "react";
import { render } from "react-dom";

class Counter extends React.Component {
  state = {
    count: 0
  };
  render() {
    this.setState({
      count: this.state.count + 1
    });
    console.log("hi");
    return (
      <div>
        <p>{this.count}</p>
      </div>
    );
  }
}

render(
  <Counter/>,
  document.getElementById("root")
);

Invariant Violation
Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.

import React, { Component } from "react";
import { render } from "react-dom";
import { observable, action } from "mobx";
import { observer } from "mobx-react";


@observer
class Counter extends React.Component {
  @observable count = 0;

  render() {
    this.count = this.count + 1 
    return (
      <div>
        <p>{this.count}</p>
      </div>
    );
  }
}

render(
  <Counter/>,
  document.getElementById("root")
);
import React, { Component } from "react";
import { render } from "react-dom";
import { observable } from "mobx";
import { observer } from "mobx-react";


@observer
class Counter extends React.Component {
  @observable count = 0;

  changeCount = () => {
    this.count = this.count + 1 
  }
  render() {
    this.count = this.count + 1 
    return (
      <div onClick={this.changeCount}>
        <p>{this.count}</p>
      </div>
    );
  }
}

render(
  <Counter/>,
  document.getElementById("root")
);
Error
[mobx] Side effects like changing state are not allowed at this point. Are you trying to modify state from, for example, the render function of a React component? Tried to modify: Counter@259.count