Wie erzwinge ich das erneute Montieren von React-Komponenten?

Nehmen wir an, ich habe eine Ansichtskomponente mit einem bedingten Rendering:

render(){
    if (this.state.employed) {
        return (
            <div>
                <MyInput ref="job-title" name="job-title" />
            </div>
        );
    } else {
        return (
            <div>
                <MyInput ref="unemployment-reason" name="unemployment-reason" />
                <MyInput ref="unemployment-duration" name="unemployment-duration" />
            </div>
        );
    }
}

MyInput sieht ungefähr so aus:

class MyInput extends React.Component {

    ...

    render(){
        return (
            <div>
                <input name={this.props.name} 
                    ref="input" 
                    type="text" 
                    value={this.props.value || null}
                    onBlur={this.handleBlur.bind(this)}
                    onChange={this.handleTyping.bind(this)} />
            </div>
        );
    }
}

Sagen wiremployed ist wahr. Immer wenn ich auf false umschalte und die andere Ansicht rendert, wird nurunemployment-duration wird neu initialisiert. Ebenfallsunemployment-reason wird mit dem Wert von @ vorbelejob-title (wenn ein Wert angegeben wurde, bevor sich die Bedingung geändert hat).

Wenn ich das Markup in der zweiten Rendering-Routine in etwa so ändere:

render(){
    if (this.state.employed) {
        return (
            <div>
                <MyInput ref="job-title" name="job-title" />
            </div>
        );
    } else {
        return (
            <div>
                <span>Diff me!</span>
                <MyInput ref="unemployment-reason" name="unemployment-reason" />
                <MyInput ref="unemployment-duration" name="unemployment-duration" />
            </div>
        );
    }
}

Es scheint, als ob alles gut funktioniert. Sieht so aus, als würde React "Berufsbezeichnung" und "Grund für Arbeitslosigkeit" einfach nicht unterscheiden.

Bitte sag mir, was ich falsch mache ...

Antworten auf die Frage(6)

Ihre Antwort auf die Frage