Reactjs AtlasKit表单提交方法中的状态更改问题

Reactjs AtlasKit表单提交方法中的状态更改问题,reactjs,atlaskit,Reactjs,Atlaskit,在Atlaskit表单的submit方法中,我想更改导致表单隐藏的state属性的值: <Form onSubmit={data => { return new Promise(resolve => { setShowForm(false); resolve(); }) }}> </Form> 因此,当我更改状态时,表单显然仍在卸载(虽然我不知道为什么这会影响表单,但我还不太熟悉React)。我在这里应该采

在Atlaskit
表单的
submit
方法中,我想更改导致表单隐藏的state属性的值:

<Form onSubmit={data => {
    return new Promise(resolve => {
        setShowForm(false);
        resolve();
    })
  }}>
</Form>

因此,当我更改状态时,表单显然仍在卸载(虽然我不知道为什么这会影响表单,但我还不太熟悉React)。我在这里应该采取什么方法?

这是因为您向API发出了异步请求,请求(例如Promise)尚未解决,但您卸载了组件

您可以通过维护一个标志来解决此问题,例如_isMounted,以查看组件是否已卸载,并根据承诺解决方案更改标志值

//示例代码

class Form extends Component {
  _isMounted = false;

  constructor(props) {
    super(props);

    this.state = {
      data: [],
    };
  }

  componentDidMount() {
    this._isMounted = true;

    axios
      .get('my_api_url')
      .then(result => {
        if (this._isMounted) {
          this.setState({
            data: result.data.data,
          });
        }
      });
  }

  componentWillUnmount() {
    this._isMounted = false;
  }

  render() {
    ...
  }
}

这是因为您向API发出了异步请求,请求(例如Promise)尚未解析,但您卸载了组件

您可以通过维护一个标志来解决此问题,例如_isMounted,以查看组件是否已卸载,并根据承诺解决方案更改标志值

//示例代码

class Form extends Component {
  _isMounted = false;

  constructor(props) {
    super(props);

    this.state = {
      data: [],
    };
  }

  componentDidMount() {
    this._isMounted = true;

    axios
      .get('my_api_url')
      .then(result => {
        if (this._isMounted) {
          this.setState({
            data: result.data.data,
          });
        }
      });
  }

  componentWillUnmount() {
    this._isMounted = false;
  }

  render() {
    ...
  }
}

我认为我遇到的问题是Atlaskit表单中的某些内容,因为卸载后我自己没有进行任何状态更新。在我删除表单后,它的状态似乎发生了变化。我认为我遇到的问题是Atlaskit表单中的一些问题,因为我在卸载后没有自己进行任何状态更新。在我删除表单后,它的状态似乎发生了变化。