React Native 中實現確認碼組件示例詳解
正文
確認碼控件也是一個較為常見的組件瞭,乍一看,貌似較難實現,但實則主要是障眼法。
實現原理
上圖 CodeInput
組件的 UI 結構如下:
<View style={[styles.container]}> <TextInput autoFocus={true} /> <View style={[styles.cover, StyleSheet.absoluteFillObject]} pointerEvents="none"> {cells.map((value: string, index: number) => ( <View style={[styles.cell]}> <Text style={styles.text}>{value}</Text> </View> ))} </View> </View>
TextInput
用於彈出鍵盤,接收用戶輸入,在它上面使用絕對定位覆蓋瞭一個用於旁路顯示的 View[style=cover]
。
這就是 CodeInput
的實現原理瞭。
需要註意以下幾個點:
- 設置
TextInput
的autoFocus
屬性,控制進入頁面時是否自動彈出鍵盤。 - 設置作為覆蓋物的
View[style=cover]
的pointerEvents
屬性為none
,不接收觸屏事件。這樣當用戶點擊該區域時,底下的TextInput
會獲得焦點。 - 設置作為容器的
View[style=container]
的高度,這個高度就是數字單元格的寬高。使用onLayout
回調來獲得容器的高度,用來設置數字單元格的寬高。
const { onLayout, height } = useLayout() const size = height return ( <View style={[styles.container, style]} onLayout={onLayout}> <TextInput /> <View style={[styles.cover, StyleSheet.absoluteFillObject]}> {cells.map((value: string, index: number) => ( <View style={[ styles.cell, { width: size, height: size, marginLeft: index === 0 ? 0 : spacing } ]}> <Text style={styles.text}>{value}</Text> </View> ))} </View> </View> )
cells
是一個字符數組,用於存放數字單元格的文本內容,它的長度是固定的。它的內容由用戶輸入的值拆分組成,如果長度不夠,則填充空字符串""
。
export default function CodeInput({ value, length = 4 }) { const cells = value.split('').concat(Array(length - value.length).fill('')) }
開源方案
GitHub 上這個庫實現瞭比較酷炫的效果。有需要的小夥伴可以使用。
這裡有一個示例,供你參考。
以上就是React Native 中實現確認碼組件示例詳解的詳細內容,更多關於React Native確認碼組件的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- ReactNative支付密碼輸入框實現詳解
- 適用於React Native 旋轉木馬應用程序介紹
- React Native可復用 UI分離佈局組件和狀態組件技巧
- React Native JSI實現RN與原生通信的示例代碼
- 用React Native制作一個簡單的遊戲引擎