Ich habe eine Komponente namens GameSetup, die im Grunde nur ein Formular ist, das Benutzer ausfüllen können. Innerhalb der GameSetup-Komponente rufe ich eine andere Komponente namens PlayerList auf, die eine Liste von Spielern in einer HTML-Liste (Liste von Strings) anzeigt.Wie man eine verschachtelte Komponente neu rendert, nachdem setState aufgerufen wird, ist das Ereignis in React
Auf dem GameSetup-Formular gibt es ein Textfeld, das es einem Benutzer ermöglicht, einen neuen Spielernamen einzugeben und dann auf die Schaltfläche zu klicken, um den Benutzer dem Spiel hinzuzufügen. Ich habe ein Button-Click-Ereignis auf der Spieler hinzufügen-Schaltfläche und ich aktualisiere den Zustand, der ein Array von Strings enthält, die alle Spieler enthält (Liste der Strings). Wenn ich einen neuen Player hinzufüge, erwarte ich, dass der Player von der PlayerList-Komponente angezeigt wird, aber nicht mit der richtigen Liste wiedergegeben wird, befindet er sich immer noch im Initialisierungszustand oder wird nicht neu gerendert.
Was muss ich tun, um das Update der PlayerList-Komponente zu erhalten, wenn ein neuer Player zur Liste hinzugefügt wird? meine GameSetup Komponente
hier:
import React from 'react';
import PlayerList from 'components/playerlist/playerlist';
export default class GameSetup extends React.Component {
constructor(props) {
super(props);
this.state = {localmode: true, players: ["test"], buyIn: 0.00, playerName: ""};
this.handleAddPlayerButtonClick = this.handleAddPlayerButtonClick.bind(this);
this.handlePlayerNameChange = this.handlePlayerNameChange.bind(this);
}
handleAddPlayerButtonClick(event) {
this.setState({
players: this.state.players.push(this.state.playerName)
});
}
handlePlayerNameChange(event) {
this.setState({
playerName: event.target.value
});
}
render() {
return (
<div>
<div className="col-lg-6">
<form>
<h2>General Game Settings</h2>
<hr />
<div className="form-group">
<input type="text" placeholder="Name of Game" className="form-control" />
</div>
<div className="form-group">
<input type="text" placeholder="Buy In" className="form-control" />
</div>
<br/>
<h2>Players</h2>
<hr />
<div className="form-group">
<input type="text" value={this.state.playerName} className="form-control" placeholder="Player Name" onChange={this.handlePlayerNameChange} />
</div>
<button className="btn btn-success" onClick={this.handleAddPlayerButtonClick}>Add Player</button>
<PlayerList players={this.state.players} />
</form>
</div>
<div className="col-lg-6">
<h2>Game Details</h2>
<hr/>
</div>
</div>
);
}
}
Hier ist meine Spieler Komponente:
import _ from 'lodash';
import React from 'react';
import PlayerListRow from './playerlistrow';
export default class PlayerList extends React.Component {
render() {
var rows = [];
this.props.players.forEach(function(player){
rows.push(<PlayerListRow player={player} key={player.Id} />);
});
return (
<ul>{rows}</ul>
);
}
}
Hier ist PlayerlistRow Komponente:
import React from 'react';
export default class PlayerListRow extends React.Component {
render() {
return (
<li>{this.props.player}</li>
);
}
}
Hier ist ein Beispiel dafür, was dem Bildschirm sieht so aus:
Vielen Dank! – Aaron