Ich bin neu bei ReactJS. Tut mir leid, wenn das nicht klingt. Ich habe eine Komponente, die mehrere Tabellenzeilen entsprechend den empfangenen Daten erstellt.
Jede Zelle in der Spalte verfügt über ein Optionsfeld. Daher kann der Benutzer eine site_name
und eine address
aus den vorhandenen Zeilen auswählen . Die Auswahl wird in der Fußzeile angezeigt. Und dort stecke ich fest.
var SearchResult = React.createClass({
render: function(){
var resultRows = this.props.data.map(function(result){
return (
<tbody>
<tr>
<td><input type="radio" name="site_name" value={result.SITE_NAME}>{result.SITE_NAME}</input></td>
<td><input type="radio" name="address" value={result.ADDRESS}>{result.ADDRESS}</input></td>
</tr>
</tbody>
);
});
return (
<table className="table">
<thead>
<tr>
<th>Name</th>
<th>Address</th>
</tr>
</thead>
{resultRows}
<tfoot>
<tr>
<td>chosen site name ???? </td>
<td>chosen address ????? </td>
</tr>
</tfoot>
</table>
);
}
});
In jQuery könnte ich so etwas wie $("input[name=site_name]:checked").val()
die Auswahl eines Radio-Kontrollkästchentyps abrufen und in die erste Fußzeilenzelle einfügen.
Aber es muss doch einen Reactjs-Weg geben, den ich total vermisse? Danke vielmals
input
Elemente haben keinen Inhalt. Macht also<input>content</input>
keinen Sinn und ist ungültig. Vielleicht möchten Sie<label><input />content</label>
.Antworten:
Alle Änderungen am Rendering sollten über das
state
oderprops
( React Doc ) geändert werden .Also registriere ich hier das Ereignis der Eingabe und ändere dann das
state
, wodurch das Rendern ausgelöst wird, das in der Fußzeile angezeigt wird.jsbin
quelle
}, this);
direkt unter dem</tbody>
. Was ist das und was macht es? Mir ist aufgefallen, ohne dass der Code abstürzt.this
ist der Kontext, der an diemap
Funktion übergeben wird . Es war die Bearbeitung von @FakeRainBrigand, guter Fang! Ohne es wird Ihrethis
in der Karte Funktion auf die verweisenwindow
, die keine Ahnung hat, worum esstate
gehtthis
Trick ist nicht erforderlich, wenn Sie anstelle einer regulären Funktion einen ES6-Pfeil verwenden. Beispiel:var resultRows = this.props.data.map((result) => { ... });
Ich erwähne es nur, weil Reaktoren normalerweise bereits irgendeine Form der Transpilation (für JSX) verwenden, sodass ES6 normalerweise leicht zu erreichen ist.onInputChange (e) {this.setState({ [e.target.name]: e.target.value }); }
Hier ist eine einfachste Möglichkeit, Optionsfelder in Reaktion js zu implementieren.
Bearbeitet
Sie können die Pfeilfunktion anstelle der Bindung verwenden. Ersetzen Sie den obigen Code als
<div onChange={event => this.setGender(event)}>
Für einen Standardwert verwenden
defaultChecked
, wie dieserquelle
.bind(this)
, dass jedes Mal eine neue Funktion geschaffen wird. Das heißt, wenn die Reaktion prüft, ob sich im virtuellen DOM etwas geändert hat, ist diese Komponente immer anders und muss immer wieder gerendert werden.name
Requisite haben. Sie sind beide in ein Div eingewickelt, das denonChange
in dieser Antwort beschriebenen Handler hat . Ich klicke auf das erste Radio, ein Ereignis wird ausgelöst. Ich klicke auf das zweite Radio, ein Ereignis wird ausgelöst. Ab dem dritten Mal wird jedoch kein Ereignis ausgelöst. Warum?Basierend auf den Aussagen von React Docs :
Beispielsweise:
Link zum Beispiel: https://codesandbox.io/s/6l6v9p0qkr
Zunächst ist keines der Optionsfelder ausgewählt, daher
this.state
handelt es sich um ein leeres Objekt. Wenn jedoch das Optionsfeld ausgewählt wird,this.state
wird eine neue Eigenschaft mit dem Namen der Eingabe und ihrem Wert abgerufen. Es ist dann einfacher zu überprüfen, ob der Benutzer ein Optionsfeld wie das folgende ausgewählt hat.BEARBEITEN:
Mit Version 16.7-alpha von React gibt es einen Vorschlag für etwas namens, mit
hooks
dem Sie solche Dinge einfacher erledigen können:Im folgenden Beispiel gibt es zwei Gruppen von Optionsfeldern in einer Funktionskomponente. Dennoch haben sie Eingänge gesteuert:
Arbeitsbeispiel: https://codesandbox.io/s/6l6v9p0qkr
quelle
Machen Sie die Funkkomponente zu einer dummen Komponente und geben Sie die Requisiten vom Elternteil weiter.
quelle
Nur eine Idee hier: Wenn es um Funkeingänge in React geht, rendere ich normalerweise alle auf eine andere Art und Weise, die in den vorherigen Antworten erwähnt wurde.
Wenn dies jemandem helfen könnte, der viele Optionsfelder rendern muss:
quelle
checked={ this.state.gender === value }
. Funktionskomponenten haben nichtthis
.quelle
Das Klicken auf ein Optionsfeld sollte ein Ereignis auslösen, das entweder:
self.props.selectionChanged(...)
Im ersten Fall löst die Änderung des Status ein erneutes Rendern aus, und Sie können dies tun
<td>chosen site name {this.state.chosenSiteName} </td>
Im zweiten Fall aktualisiert die Quelle des Rückrufs die Dinge, um sicherzustellen, dass Ihre SearchResult-Instanz später in den Requisiten den Namen "Site-Name" und "Adresse ausgewählt" hat.
quelle
Um auf ChinKang aufzubauen, sagte er für seine Antwort, ich habe einen trockeneren Ansatz und in es6 für die Interessierten:
außer dass dieser einen standardmäßig aktivierten Wert haben würde.
quelle
Ich war auch verwirrt im Radio, Checkbox-Implementierung. Was wir brauchen, ist, das Änderungsereignis des Radios zu hören und dann den Status festzulegen. Ich habe ein kleines Beispiel für die Auswahl der Geschlechter gemacht.
quelle
Bootstrap Jungs, wir machen das so:
quelle