如何在Mobx + reactjs中使用@Action?

cho*_*bo2 4 javascript reactjs mobx mobx-react

我对如何在代码中使用@action感到困惑。

class Items {

  @observable items= [];

  @action addItem() {
    let newItem= new Item();
    items.push(newItem);
  }
}

@observer
class ItemPage extends Component {

  constructor() {
    super();
  }

  render() {
    const {addItem} = this.props.store;
    return (
      <div className="items">
        <input type="button" value="add" onClick={addItem}/>
      </div>
    )
  }
}

const store = new Items();
Run Code Online (Sandbox Code Playgroud)

Tho*_*lle 7

确保您改变了this.items而不仅仅是改变items。您还需要在组件中绑定操作action.bound或创建绑定处理程序:

class Items {
  @observable items= [];

  @action.bound
  addItem() {
    let newItem = new Item();
    this.items.push(newItem);
  }
}

@observer
class ItemPage extends Component {
  render() {
    const { addItem } = this.props.store;
    return (
      <div className="items">
        <input type="button" value="add" onClick={addItem}/>
      </div>
    );
  }
}

const store = new Items();
Run Code Online (Sandbox Code Playgroud)

要么:

class Items {
  @observable items= [];

  @action
  addItem() {
    let newItem = new Item();
    this.items.push(newItem);
  }
}

@observer
class ItemPage extends Component {
  handleClick = () => {
    this.props.store.addItem();
  };
  render() {
    return (
      <div className="items">
        <input type="button" value="add" onClick={this.handleClick}/>
      </div>
    );
  }
}

const store = new Items();
Run Code Online (Sandbox Code Playgroud)

  • @Tholle精美地解释了!很清楚,我找不到如此简单的解释。谢谢! (2认同)