Ich habe eine Komponente, die ziemlich viel tut - möglicherweise nicht die beste Praxis, aber das ist meine erste Reaktion App, also sobald ich alles arbeiten werde ich wahrscheinlich wieder gehen Umgestalten von Bits und Stücken.React JS - Benutzerinformationen zum ausgewählten Wert aktualisieren
Ich habe einen Konstruktor einrichten Zustand.
Ich habe eine KomponenteDidMount, die JSON von einer API abruft.
Ich habe eine Render-Funktion, die einige Variablen erstellt und produziert JSX-Code, dies gibt eine Tabelle mit Client-Daten aus der JSON API und enthält ein Auswahlmenü mit Optionen aus der API geladen.
Ich habe einen Event-Handler, der OnChange ausführt, wenn der Benutzer den Auswahlwert ändert.
Was passiert derzeit wenn der Auswahlwert geändert wird (zum Beispiel) Team 1, dann ändern sich alle Auswahlmöglichkeiten zu "Team 1" statt nur 1 Datensatz.
Was ich versuche zu tun ist nur die 1 Datensatz aktualisieren, aber dann auch in der Lage sein, die User.ID zusammen mit dem neuen Wert (für die 1 Datensatz) zurückgeben, so dass ich dann die API aktualisieren kann (I wissen, wie man die Daten zurückschickt, es bekommt nur die richtigen Werte zu posten).
Mein Code unten:
import React from 'react';
class GetUnassignedUsers extends React.Component {
constructor() {
super();
this.state = {
data:{unassignedUsers:[],teams:[]},
selectValue: '8'
};
}
componentDidMount() {
fetch("http://localhost/dashboard/?action=unassignedUsers.getUnassingedUsers", {
credentials: 'same-origin'
})
.then(response => response.json())
.then((json) => {
this.setState({
data: json
});
});
}
handleChange (event) {
alert(this.state);
this.setState({
selectValue: event.target.value
});
}
render() {
let unassignedUsers = this.state.data.unassignedUsers;
let teams = this.state.data.teams;
let availableTeams = teams.map(function (team) {
return (
<option value={team.id}>{team.team_name}</option>
)
});
let select = (
<select value={this.state.selectValue} onChange={this.handleChange.bind(this)}>
{availableTeams}
</select>
);
let rows = unassignedUsers.map(function (user) {
return (
<tr>
<td>{user.ID}</td>
<td>{user.dateCreated}</td>
<td>{user.company}</td>
<td>{user.email}</td>
<td>{user.contactName}</td>
<td>{user.quoteDomain}</td>
<td>{user.InvoicePostCode}</td>
<td>
{select}
</td>
</tr>
)
});
return (
<tbody>
{rows}
</tbody>
);
}
}
export default GetUnassignedUsers;
Wenn Sie nur eine Auswahl verwenden, wird diese Zeile nicht angezeigt, wenn der Auswahlwert beispielsweise auf Team 1 geändert wird, dann werden alle Auswahlmöglichkeiten zu "Team 1" und nicht nur zu diesem Datensatz Mehr ?? –
Ja, kann ich auch nur 1 auswählen? – Chris
Ich denke, ich habe es, er verwendet eine Auswahl, weil select für alle Tabellenzeilen gleich ist, wenn er alle Änderungen ändert, muss er separate Auswahl für alle Tabellenzeilen verwenden. –