簡體   English   中英

在React.js中的狀態

[英]State in React.js

我是React.js的新手。 我有下面的代碼,其中變量modalOpen值未更改。

constructor(props) {
    super(props);

    this.state = {
      modalOpen: false,
    };

    this.view = this.view.bind(this);
}
view() {
    this.setState({ modalOpen: true });

    alert(this.state.modalOpen)
}
render() {
    return (
        <button className="mini ui button" onClick={this.view}>
            <i className="user icon"></i>
            View
        </button>
    )
}

如何更改值?

您的代碼是正確的,您可能需要將alert放在setState回調中或在render

  constructor(props) {
    super(props);

    this.state = {
      modalOpen: false,
    };

    this.view = this.view.bind(this);
  }
  view() {
    this.setState({ modalOpen: true }, ()=>{
      alert(this.state.modalOpen)
    });

  }
  render() {
    return (
      <div>
      <button className="mini ui button" onClick={this.view}>
        <i className="user icon"></i>
        View
        </button>
      {this.state.modalOpen ? 'true' : 'false'}
        </div>
    )
  }
}

來自React Docs

將setState()視為請求而不是立即更新組件的命令。 為了獲得更好的感知性能,React可能會延遲它,然后在一次通過中更新幾個組件。 React不保證狀態更改會立即應用。

setState(updater, callback)

答:如果要對prev狀態做些事情,最好將一個函數作為更新程序傳遞給setState

this.setState((prevState, props) => {
  return {counter: prevState.counter + props.step};
});

B.對於您的情況,在更新狀態並要調用回調函數之后,將需要setStatecallback ,例如:

view() {
  this.setState({
    modalOpen: true
  }, () => {
    alert(this.state.modalOpen)
  });
}

因為setState是異步的。之所以這樣做是為了提高性能。 就像在window.resize事件中添加偵聽器時,您不希望每次發出resize事件時都調用該偵聽器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM