ReactNative TextInput 常用方法實踐
'use strict';
var React = require('react');
var ReactNative = require('react-native');
var {
Text,
TextInput,
View,
StyleSheet,
AppRegistry,
Alert,
} = ReactNative;
class TextInputDemo extends React.Component {
// constructor(props) {
// super(props);
// this.state = { text: 'url Placeholder'};
// }
_onChangeText(text) {
console.log('_onChangeText called and text is', text);
}
_onChange(text) {
console.log('_onChange called and text is', text);
}
_onEndEditing(text) {
console.log('_onEndEditing called and text is', text);
}
_onFocus() {
//點選某一個item,獲得焦點就會呼叫這個方法
console.log('_onFocus called');
}
_onSelectionChange(range) {
//當在item中選擇的位置發生變化時就會呼叫這個方法,比如第一次選擇第二個字元的位置,第二次更改為點選第一個字元位置
var rangeText = range;
console.log('_onSelectionChange called and range is', rangeText);
}
_onSubmitEditing(text) {
console.log('_onSubmitEditing called and text is', text);
}
render() {
return(
<View>
<TextInput
ref = 'URLTEXTINPUT'
style = {{height: 40, borderColor: 'gray', borderWidth: 1}}
placeholder = 'URL'
onChangeText={(text) => this._onChangeText(text)}
onChange = {(event)=>this._onChange('onChange text: ' + event.nativeEvent.text)}
//onEndEditing 在文字輸入結束後會呼叫,時機為在某個框體內輸入文字後選擇鍵盤上的完成鍵或者輸入文字後將焦點手動點換到其它item上,或者輸入文字後選擇return按鈕來切換都會呼叫
onEndEditing = {(event)=>this._onEndEditing('onEndEditing text: ' + event.nativeEvent.text)}
//如果屬性設定了clearTextOnFocus為true,意思是第二次回到同一個itme的時候自動清空裡面的內容, 那麼onChangeText就不會被重新呼叫,那麼儲存的還是上一次的值。當判斷值不為空的情況下就會出錯。
//這種情況下就需要判斷onSelectionChange中的range是否為0來判斷了
clearTextOnFocus = {true}
onFocus = {(event) =>this._onFocus}
returnKeyType = 'next'
onSelectionChange = {(event) =>this._onSelectionChange(event.nativeEvent.selection.start + event.nativeEvent.selection.end)}
//此回撥函式當軟鍵盤的確定/提交按鈕被按下的時候呼叫此函式。如果multiline={true},此屬性不可用。還有就是輸入文字後選擇enter鍵也會呼叫此函式,和onEndEditing唯一不同的是,它在輸入框
// 焦點切換成另外一個輸入框焦點時候不會被呼叫
//所以如果想實現類似選擇next按鈕後將焦點自動切換到下一個item項的功能就可以在這個回撥函式中實現
onSubmitEditing = {(event)=>this.refs.USERNAMETEXTINPUT.focus()}
/>
<TextInput
ref = 'USERNAMETEXTINPUT'
style = {{height: 40, borderColor: 'gray', borderWidth: 1}}
placeholder = 'Username'
//當文字框內容變化的時候呼叫此回撥函式,改變後的文字內容會作為引數來傳遞, onChange一樣的情況呼叫,唯一不同的是引數不支援直接的text字串來傳遞而已
onChangeText={(text) => this._onChangeText(text)}
onChange = {(event)=>this._onChange('onChange text: ' + event.nativeEvent.text)}
onEndEditing = {(event)=>this._onEndEditing('onEndEditing text: ' + event.nativeEvent.text)}
//如果屬性設定了clearTextOnFocus為true,意思是第二次回到同一個itme的時候自動清空裡面的內容,那麼onChangeText就不會被重新呼叫,那麼儲存的還是上一次的值。當判斷值不為空的情況下就會出錯。
//這種情況下就需要判斷onSelectionChange中的range是否為0來判斷了
clearTextOnFocus = {true}
onFocus = {(event) =>this._onFocus}
returnKeyType = 'next'
//onSelectionChange 當在文字框中的選擇內容發生變化的時候會呼叫這個方法, 簡單點兒就是游標位置和上次不同,就會呼叫。 呼叫時機包括: 選擇文字, 長點選重新定位游標位置, 輸入和刪除文字, 游標focus到不同的item時
//這個特性就可以使用在一種使用場景下,比如 設定了clearTextOnFocus = {true}屬性,清空內容後選擇登入按鈕,此時需要監測各個輸入框是否已經有內容,那麼用textchange之類的是無法判斷出來的,
onSelectionChange = {(event) =>this._onSelectionChange(event.nativeEvent.selection.start + event.nativeEvent.selection.end)}
onSubmitEditing = {(event)=>this.refs.PASSWORDTEXTINPUT.focus()}
/>
<TextInput
ref = 'PASSWORDTEXTINPUT'
style = {{height: 40, borderColor: 'gray', borderWidth: 1}}
placeholder = 'Password'
onChangeText={(text) => this._onChangeText(text)}
onChange = {(event)=>this._onChange('onChange text: ' + event.nativeEvent.text)}
onEndEditing = {(event)=>this._onEndEditing('onEndEditing text: ' + event.nativeEvent.text)}
//如果屬性設定了clearTextOnFocus為true,意思是第二次回到同一個itme的時候自動清空裡面的內容,那麼onChangeText就不會被重新呼叫,那麼儲存的還是上一次的值。當判斷值不為空的情況下就會出錯。
//這種情況下就需要判斷onSelectionChange中的range是否為0來判斷了。如果使用其它的例如changetext方法來判斷結果會得到上次儲存的結果,因為這種情況下是不會呼叫諸如此類text改變的方法的
clearTextOnFocus = {true}
onFocus = {(event) =>this._onFocus}
enablesReturnKeyAutomatically = {true}
returnKeyType = 'go'
onSelectionChange = {(event) =>this._onSelectionChange(event.nativeEvent.selection.start + event.nativeEvent.selection.end)}
onSubmitEditing = {(event)=>this._onSubmitEditing('onSubmitEditing text: ' + event.nativeEvent.text)}
/>
</View>
);
}
}
AppRegistry.registerComponent('TextInputDemo', () => TextInputDemo);
這個demo主要實現了在選擇next按鈕的時候自動將焦點切換到下一項的功能,那麼對於目前階段實現的功能,基本的知識點如下:
onChange 和 onChangeText :當文字框內容變化的時候呼叫此回撥函式,onChangeText改變後的文字內容會作為引數來傳遞, onChange一樣的情況呼叫,唯一不同的是引數不支援直接的text字串來傳遞而已
onEndEditing :在文字輸入結束後會呼叫,時機為在某個框體內輸入文字後選擇鍵盤上的完成鍵或者輸入文字後將焦點手動點換到其它item上,或者輸入文字後選擇return按鈕來切換都會呼叫
onSubmitEditing :此回撥函式當軟鍵盤的確定/提交按鈕被按下的時候呼叫此函式。如果multiline={true},此屬性不可用。還有就是輸入文字後選擇enter鍵也會呼叫此函式,和onEndEditing唯一不同的是,
它在輸入框焦點切換成另外一個輸入框焦點時候不會被呼叫,所以如果想實現類似選擇next按鈕後將焦點自動切換到下一個item項的功能就可以在這個回撥函式中實現
onSelectionChange :onSelectionChange 當在文字框中的選擇內容發生變化的時候會呼叫這個方法, 簡單點兒就是游標位置和上次不同,就會呼叫。 呼叫時機包括: 選擇文字, 長點選重新定位游標位置, 輸入和刪除文字, 游標focus到不同的item時這個特性就可以使用在一種使用場景下,比如 設定了clearTextOnFocus = {true}屬性,清空內容後選擇登入按鈕,此時需要監測各個輸入框是否已經有內容,那麼用textchange之類的是無法判斷出來的。
原文:ReactNative TextInput 常用方法實踐
補充參考文章:React Native - 文字輸入框(TextInput)的使用詳解
相關文章
- ReactNative分包實踐React
- ReactNative學習實踐:Navigator實踐React
- ReactNative專案實踐編碼規範React
- Hive常用效能優化方法實踐全面總結Hive優化
- 鴻蒙HarmonyOS實戰-ArkUI元件(TextInput/TextArea)鴻蒙UI元件
- ReactNative 多端程式碼覆蓋率調研及實踐React
- ReactNative實現ToastReactAST
- TextInput should be given height
- react-native TextInput 使用React
- TreeMap原理實現及常用方法
- ReactNative實現地圖導航React地圖
- reactnative開發常用優質第三方元件React元件
- Scrum敏捷開發方法實踐Scrum敏捷
- 14.Quick QML-TextInput詳解UI
- React Native元件篇(三) — TextInput元件React Native元件
- CSS實現垂直居中的常用方法CSS
- 超實用的“情境調研”實踐方法
- Linux專案實踐中常用操作彙總Linux
- Playmaker全面實踐教程之Playmaker常用工具
- Fetch方法封裝、業務實踐封裝
- 敏捷測試的方法與實踐敏捷測試
- 淺析手機抓包方法實踐
- 實踐Pytorch中的模型剪枝方法PyTorch模型
- android monkey 測試方法實踐Android
- 學習C++:實踐者的方法C++
- shell常用小方法——快速實現upper和lower
- 如何實現CSS居中?–CSS居中常用方法CSS
- Redis常用方法Redis
- ThinkPHP常用方法PHP
- ReactNative入門React
- ONE-ReactNativeReact
- ReactNative Demo -SearchInputReact
- 敏捷開發實踐之Scrum方法運用敏捷Scrum
- Docker最佳實踐:5個方法精簡映象Docker
- docker映象體積優化方法與實踐Docker優化
- JavaScript 建立物件: 方法一覽與最佳實踐JavaScript物件
- ASP.NET快取:方法和最佳實踐ASP.NET快取
- 學習C++:實踐者的方法(轉)C++