Ich versuche mit React zu experimentieren, habe ich ein Problem der Aktualisierung der Statuswerte eines bestimmten Schlüssels.React - State Update nur Wert von bestimmten Schlüssel
Hier ist mein Zustand
this.state = {
connections : {
facebook : "http://facebook.com",
flickr : null,
foursquare : null,
googleplus : null,
id : 0,
instagram : "http://instagram.com/",
openstreetmap : null,
pinterest : null,
place_id : 1,
tomtom : null,
tripadvisor : null,
twitter : "http://twitter.com",
vimeo : null,
wikipedia : null,
yelp : null,
youtube : null
},
contact : {
}
}
Ich bin eine externe Komponente aufrufen und Parameter, um es zu senden.
<Connection type="Facebook" icon={facebookIcon} placeholder="Add Facebook Link" name="facebook" value={this.state.connections.facebook} onChange={this.handleChange.bind(this)}/>
<Connection type="Twitter" icon={twitterIcon} placeholder="Add Twitter Link" name="twitter" value={this.state.connections.twitter} onChange={this.handleChange.bind(this)}/>
<Connection type="Instagram" icon={instagramIcon} placeholder="Add Instagram Link" name="instagram" value={this.state.connections.instagram} onChange={this.handleChange.bind(this)}/>
Komponente in externer Datei:
<input type="text" name={this.props.name} placeholder={this.state.placeholder} value={this.props.value} onChange={this.props.onChange} />
Auf Wertänderung in Textbox,
handleChange(e) {
this.setState({
connections : {[e.target.name]: e.target.value}
})
}
Während ich versuche, alle Feldwerte zu ändern, setzt er den Rest 2 mit leer. Wenn ich beispielsweise versuche, die Textbox von Facebook zu bearbeiten, werden die Werte für Twitter und Instagram auf leer gesetzt.
Darf ich wissen, was ich beim Einstellen von handleChange falsch mache? Ich bin sicher, es ist etwas falsch mit this.setState, aber nicht sicher, wie bestimmte Schlüsselwert Ziel.
vor allem sollten Sie nicht so eine lange Liste von lokalen Zustand haben. Grund a) schwer zu handhaben 2) es bricht Code, wenn Sie versuchen, etwas zu ändern. Brechen Sie die große Komponente in eine kleinere Komponente. für dein Problem versuche, e.preventDefault in handleChange Funktion hinzuzufügen –
@KhalidAzam Danke, dass du mich darüber informiert hast, ich sehe keine Möglichkeit, die Liste zu durchbrechen, hast du irgendwelche Tipps dazu?Coz, meine nächste Komponente sind Annehmlichkeiten, und es hat eine Liste, die 100 mal so groß ist. Ich habe mich gefragt, als externe js zu speichern und hier zu importieren. Irgendwelche besseren Ideen würden geschätzt werden. –