2016-04-18 3 views
4

[Bearbeiten] Dies war aufgrund meiner eigenen Verwirrung, Entschuldigungen.Warum sagt React, die Eigenschaft 'selected' nicht auf <option> Elemente zu setzen?

Einstellen der selected Eigenschaft auf <option> Elemente in JSX funktioniert perfekt, aber es bewirkt, dass der Wurf eine Warnung reagieren:

Warning: Use the 'defaultValue' or 'value' props on <select> instead of setting 'selected' on <option>.

Einstellung defaultValue auf dem übergeordneten <select> Element bewirkt, dass die value der <select> bis auf dem Standard diese Einstellung, aber es setzt nicht die Standardeinstellung <option>. Dadurch wird das angezeigt, was der Benutzer sieht und was nicht synchron ist.

Einstellen der value Eigenschaft auf dem übergeordneten <select> Element mich zwingt, dann einen onChange Handler hinzufügen, um den Wert in der Komponente Zustand gesetzt, und eine Reihe von zusätzlichen Code schreiben, um alle zu erreichen, was einfach selected Einstellung auf den <option> Elemente mit einem tut einzelnes Wort.

Weiß jemand, warum React diese Warnung ausgibt? Ich möchte keinen zusätzlichen Code schreiben, um eine Warnung zu entfernen, die nicht der Realität zuzuordnen ist. Soweit ich weiß, funktioniert es gut, also warum sollte ich es nicht benutzen?

+2

Was meinen Sie, wenn Sie sagen, dass 'defaultValue' nicht "den Standard ausgewählt gesetzt ''

+0

' ' In diesem Codebeispiel, wenn die Komponente zuerst den Wert des select-Elements rendert, ist" B ", aber was der Benutzer als" standardmäßig ausgewählt "sieht, ist A, als wäre es wenn ich keine defaultValue-Einstellung hatte . – rodwa4

+2

Huh? Das passiert aber nicht. Https://jsfiddle.net/69z2wepo/39163/ – azium

Antwort

4

Hier ist die Reaktion Dokumentation mit dieser Warnung gehen zusammen: https://facebook.github.io/react/docs/forms.html

Wenn Sie es so machen sie darauf hindeutet, könnten Sie Ihre <SELECT> Komponente mit einer „Wert“ Eigenschaft machen. Dann müssten Sie eine Handler-Funktion für das onChange-Ereignis schreiben, um sicherzustellen, dass die Komponente die geänderte Auswahl des Benutzers wiedergibt.

Wenn Sie versucht haben, diesen Informationsfluss auf der Ebene der einzelnen <OPTION> Element zu verwalten, denke ich, Sie hätten die gleichen Herausforderungen, und dann einige. Nehmen wir beispielsweise an, dass Option A beim Laden der Seite ausgewählt wurde. Dann wählt der Benutzer Option B. Option B müsste erneut gerendert werden, um ausgewählt zu sein, und Option A müsste erneut gerendert werden, um nicht ausgewählt zu werden. Wenn das Ereignis onClick für Option B eine Änderung der Option A auslöst, müssen die Informationen von Option B an das übergeordnete Select-Element und anschließend an die Option A-Element übergeben werden.

Diese React-Dokumentation spricht auch von einem "unkontrollierten" <SELECT> -Element, was ich denke, dass es einmal am Anfang rendern würde (und Sie könnten einen DefaultValue dafür angeben, aber React würde es nicht in Echtzeit neu rendern.

+0

Hmm, ich glaube ich verstehe, was du sagst, aber es scheint nicht mit dem übereinzustimmen, was tatsächlich passiert. Hier ist mein Code: '' Dieser Code verhält sich überhaupt nicht wie beschrieben. Es wird zunächst mit einem Wert von "Option B" und "Option B" ausgewählt. Wenn der Benutzer auf "Option C" oder "Option A" klickt und auswählt, ist die jeweilige ausgewählte Option jetzt sowohl ausgewählt als auch die Option. Es funktioniert einfach ohne zusätzliche Beinarbeit. – rodwa4

Verwandte Themen