2015-12-02 4 views
18

Reagieren india eine Textinput-Komponente Benutzereingaben zu akzeptieren und ich bin interessiert an der Differenz zwischenUnterschied zwischen onEndEditing und onBlur?

onEndEditing(callback that is called when text input ends)

onBlur(callback that is called when the text input is blurred)

gibt es eine scenerio wo es hat nicht kann nur mit onBlur gelöst werden, wann ist onEndEditing sinnvoll?

+1

Es gibt einen Unterschied zwischen onSubmitEditing. Das onSubmitEditing wird nicht aufgerufen, wenn multiline = true ist. – vijayst

Antwort

11

Hah, lassen Sie mich zuerst sagen, ich hasse Sie für das Stellen dieser Frage! Du hast mich gezwungen, die Antwort herauszufinden :)

Ich glaube, das ist in der Geschichte verwurzelt, da es von iOS stammt, das das native Ereignis UIControlEventEditingDidEnd hat. Das ist wahrscheinlich die Namensgebung vor blur wurde als eine Abstraktion eingeführt.

TL: DR;

onEndEditing sollte meiner Meinung nach wirklich veraltet sein, aber von jetzt an sollten Sie es verwenden, weil es die plattformunabhängigste Version von Unschärfe ist. Siehe unten.

Beide onBlur und onEndEditing erhalten ein Ereignis. Auf iOS scheinen beide genau dasselbe zu tun, und das Ereignis hat den nativen Text. In Android gibt es zwei verschiedene Ereignisse, von denen nur eines Zugriff auf den Text hat. Für mich scheint das ein Fehler zu sein.

Beachten Sie die Unterschiede zwischen Android onEndEditing und Android onBlur.

// this is undefined on Android 
onBlur={(e) => alert(e.nativeEvent.text)} 

Also, wenn Sie den Text während einer Unschärfe zu lesen, erhalten Sie plattformübergreifende Nutzbarkeit mit onEndEditing für jetzt.

this rnplay sehen Sie die Unterschiede in OS

+1

"Ich glaube, das ist in der Geschichte verwurzelt, da es von iOS stammt": React Native war iOS-only am Anfang, also würde dies Sinn machen. –

+0

Sieht so aus, als ob diese Ereignisse nicht immer gleichzeitig ausgelöst werden, zumindest unter Android: https://github.com/facebook/react-native/blob/1b870d201976455303ee176c03a4824eac07e11b/ReactAndroid/src/main/java/com/facebook/ Reagieren/Ansichten/Textinput/ReactTextInputManager.java # L652; L701 –

5

Mit Blick auf die iOS und Android Beispiele zu sehen, ist scheint wie onEndEditing gemeint, den Inhalt des TextInput passieren, während onBlur nicht gemeint ist, alle Daten zu übergeben:

Es gibt tatsächlich einen Unterschied zwischen dem Zeitpunkt, zu dem diese Ereignisse ausgelöst werden. Here können wir sehen, dass onEndEditing für native Android onEditorAction ausgelöst wird, während onBlur nicht ist. Die Aktion kann entweder "Search" sein (dies entspricht dem speziellen "Suchen" -Symbol auf Android-Tastaturen), obwohl ich nicht weiß, was React Native API Ihnen erlaubt, diese Aktionssymbole als Teil der Tastatur anzuzeigen.

Im Allgemeinen ist die Betrachtung examples/Implementierung ein guter Weg, etwas zu verstehen, das nicht gut genug dokumentiert ist.

Wenn dies in den JS-Dokumenten unklar ist, reichen Sie bitte eine Pull-Anfrage ein, um dies zu klären.Wenn die Implementierung etwas tut, das zwischen den Plattformen keinen Sinn ergibt oder nicht konsistent ist, reichen Sie eine Pull-Anforderung ein, um die Implementierung zu reparieren. Dies sollte anderen helfen.