2015-12-02 20 views
18

Yerli kullanıcı girişlerini kabul etmek için bir TextInput bileşeni vardır tepki ve benarasındaki fark? Bir senaryosu var

onEndEditing(callback that is called when text input ends)

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

arasındaki fark ilgileniyorum nerede olamaz Sadece onBlur ile çözülmeli, onEndEditing yararlı olduğunda?

+1

onSubmitEditing arasında bir fark var. OnSubmitEditing, multiline = true olursa çağrılmaz. – vijayst

cevap

11

Hah, önce bu soruyu sorduğum için senden nefret ettiğimi söyleyeyim! Bana cevabı bulmaya zorladınız :)

Bu durumun, yerel olayı UIControlEventEditingDidEnd olan iOS'tan kaynaklandığından bu yana kök salmış olduğuna inanıyorum. Muhtemelen blur'dan önceki isimlendirme bir soyutlama olarak tanıtılmıştır.

TL: DR;

onEndEditing gerçekten benim düşünceme göre kullanılmamalıdır, ancak şu andan itibaren onu kullanmalısınız çünkü bu, en çok platformun agnostik versiyonudur. Aşağıya bakınız.

Her ikisi de onBlur ve onEndEditing bir olay olsun. IOS'ta bunların her ikisi de aynı şeyi yapıyor gibi görünüyor ve etkinliğin yerel metni var. Android'de, iki farklı olaydır ve bunlardan yalnızca bir tanesi metne erişebilir. Bana göre bu bir böcek gibi görünüyor.

Android onEndEditing ve Android onBlur arasındaki farklara dikkat edin.

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

Yani bir bulanıklık sırasında metin okuma, sen şimdilik onEndEditing ile çapraz platform kullanılabilirlik olsun.

: onBlur hiçbir verinin anlamına gelmez iken

, TextInput içeriğini geçmek içindir onEndEditing gibi görünüyor, iOS ve Android örneklere bakıldığında OS

+1

"Bunun, iOS'tan kaynaklandığından bu yana köklü olduğuna inanıyorum": React Native yalnızca en başlangıçta iOS'du, bu nedenle bu mantıklı olurdu. –

+0

Bu etkinliklerin her zaman aynı anda değil, en az Android: https://github.com/facebook/react-native/blob/1b870d201976455303ee176c03a4824eac07e11b/ReactAndroid/src/main/java/com/facebook//Gösterim/TextInput/ReactTextInputManager.java # L652 tepki; L701 –

5

farklılıkları görmek için this rnplay bakın

Aslında bu olayların ne zaman ortaya çıktığı arasında bir fark var. Here, onEndEditing'un yerel Android onEditorAction için yükseltildiğini, onBlur ise olmadığını görebiliyoruz. Eylem, "Search" (bu, Android klavyelerinde özel "Arama" simgesine karşılık gelir) olabilir, ancak React Native API'nin bu eylem simgelerini klavyenin bir parçası olarak görüntülemenizi sağladığını bilmiyorum bile. Genel olarak, examples/uygulamasına bakmak, yeterince iyi belgelenmeyen bir şeyi anlamak için iyi bir yoldur.

JS belgelerinde bu açık değilse, açıklığa kavuşturmak için lütfen bir çekme isteği gönderin.Uygulama, mantıklı olmayan veya platformlar arasında tutarsız bir şey yaparsa, uygulamayı düzeltmek için lütfen bir çekme isteği gönderin. Bu başkalarına yardım etmeli.