React setState kann nur eine bereitgestellte oder bereitgestellte Komponente aktualisieren.

Ich erhalte die folgende Warnung

"Warnung: setState (...): Kann nur eine gemountete oder gemountete Komponente aktualisieren. Dies bedeutet normalerweise, dass Sie setState () für eine nicht gemountete Komponente aufgerufen haben. Dies ist keine Aktion. Überprüfen Sie den Code für die ContactPage-Komponente."

Wenn ich zum ersten Mal auf die Kontaktseite gehe, ist es in Ordnung. Wenn ich dann von der Seite gehe und zurück gehe, wird die Warnung ausgegeben.

Kontaktseitenkomponente:

import React, { Component, PropTypes } from 'react';
import AppStore from '../../stores/AppStore';
import AppActions from '../../actions/AppActions';
import DataContent from './DataContent';

const title = 'Contact Us';


class ContactPage extends Component {

    constructor(props) {
        super(props);
        this.state = AppStore.getState();
        AppActions.getData();
    }

  static contextTypes = {
    onSetTitle: PropTypes.func.isRequired,
  };

  componentWillMount() {
    this.context.onSetTitle(title);
    AppStore.listen(this.onChange.bind(this));
}

componentWillUnmount() {
    AppStore.unlisten(this.onChange.bind(this));
}

onChange(state) {
    this.setState(state);
}

renderData() {
    return this.state.data.map((data) => {
        return (
            <DataContent key={data.id} data={data} />
        )
    })
}

  render() {
    return (
      <div className={s.root}>
        <div className={s.container}>
          <h1>{title}</h1>
          <div>
              { this.renderData() }
          </div>
        </div>
      </div>
    );
}

}

export default ContactPage;

Wenn ich Debugger einsetze, wird beim Laden der Kontaktseite componentWillMount () aufgerufen. Wenn ich die Kontaktseite verlasse, wird componentWillUnmount () aufgerufen. Wenn ich zurück zur Seite navigiere, wird erneut componentWillMount () aufgerufen und der Fehler ausgegeben, wenn die Funktion onChange (state) aufgerufen wird.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage