Ich habe die übergeordnete Komponente namens App
. Es enthält den Staat und die Form, die den Staat verändert.Wie Komponenten aktualisiert werden, wenn sich der Elternstatus ändert, reagiere bei der Verwendung von Reagieren Router
Ich entfernte den unwichtigen Code. Wenn ich etwas in das Formular eintippe, wird ein Objektelement in state.item
hinzugefügt, aber ToCompleteItemsComponent
wird nicht aktualisiert. Gibt es eine Möglichkeit, dass die Komponente auf Zustandsänderung
class App extends Component {
state = {
items: []
}
submitItem=(e)=> {
e.preventDefault();
let items = this.state.items;
items.push({
name: this.state.ValuePlaceholder,
completed: false
});
this.setState({
items
});
}
render() {
return (<BrowserRouter>
<div className="wrap">
...
<form onSubmit={this.submitItem}>
<input type="text" />
</form>
<Route exact path="/"
render={props => <ToCompleteItemsComponent
items={this.state.items} /> }
/>
</div>
</BrowserRouter>
);
}
}
bearbeiten Dies ist die Komponente
class ToCompleteItemsComponent extends Component {
componentWillReceiveProps(nextProps) {
// check this.props vs nextProps and setState!
// do whatever you want.
console.log(nextProps)
}
render(){
return(<div>
<ul className="items">
{
this.props.items.map((item,id)=> <li key={id}>{item.name} <span>x</span></li>)
}
</ul>
</div>)
}
}
export default ToCompleteItemsComponent;
console.log(nextProps)
Gibt ein leeres Array
'nextProps' ein leeres Array zurück! – relidon
@relidon Der einzige Grund, an den ich jetzt denken kann, ist, weil this.state.items ein leeres Array ist. – Lokuzt
können Sie die aktualisierte Frage betrachten, ich habe die Komponente hinzugefügt. Nur um zu überprüfen, ob mir etwas fehlt – relidon