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專案實踐編碼規範React
- ReactNative 多端程式碼覆蓋率調研及實踐React
- Hive常用效能優化方法實踐全面總結Hive優化
- 鴻蒙HarmonyOS實戰-ArkUI元件(TextInput/TextArea)鴻蒙UI元件
- ReactNative實現ToastReactAST
- ReactNative實現地圖導航React地圖
- reactnative開發常用優質第三方元件React元件
- 14.Quick QML-TextInput詳解UI
- TreeMap原理實現及常用方法
- Linux專案實踐中常用操作彙總Linux
- Scrum敏捷開發方法實踐Scrum敏捷
- Fetch方法封裝、業務實踐封裝
- 實踐Pytorch中的模型剪枝方法PyTorch模型
- ReactNative版友盟推送React
- ReactNative初體驗React
- ReactNative環境搭建React
- 淺析手機抓包方法實踐
- ThinkPHP常用方法PHP
- QueryRunner常用方法
- DOM 常用方法
- ReactNative——react-native-video實現視訊全屏播放ReactIDE
- ReactNative之手勢識別React
- ReactNative ViewPageAndroid元件詳解ReactViewAndroid元件
- react-native TextInput 中文輸入bug 曲線救國React
- docker映象體積優化方法與實踐Docker優化
- Netflix 混沌工程手冊 Part 3:實踐方法
- 敏捷開發實踐之Scrum方法運用敏捷Scrum
- Linux神器strace的使用方法及實踐Linux
- Docker最佳實踐:5個方法精簡映象Docker
- 前端效能最佳化實踐方向與方法前端
- Go 實現常用設計模式(七)模板方法模式Go設計模式
- tk.mybatis中常用方法的使用(最實用)MyBatis
- python如何實現單例模式?常用方法彙總!Python單例模式
- reactnative實現qq聊天訊息氣泡拖拽消失效果React
- Istio最佳實踐系列:如何實現方法級呼叫跟蹤?
- 自動化實踐篇丨教你逐步解析Selenium常用API介面API
- 小程式 · 常用方法