React Native 中實現(xiàn)確認(rèn)碼組件示例詳解
正文
確認(rèn)碼控件也是一個較為常見的組件了,乍一看,貌似較難實現(xiàn),但實則主要是障眼法。
實現(xiàn)原理
上圖 CodeInput
組件的 UI 結(jié)構(gòu)如下:
<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
的實現(xiàn)原理了。
需要注意以下幾個點:
- 設(shè)置
TextInput
的autoFocus
屬性,控制進(jìn)入頁面時是否自動彈出鍵盤。 - 設(shè)置作為覆蓋物的
View[style=cover]
的pointerEvents
屬性為none
,不接收觸屏事件。這樣當(dāng)用戶點擊該區(qū)域時,底下的TextInput
會獲得焦點。 - 設(shè)置作為容器的
View[style=container]
的高度,這個高度就是數(shù)字單元格的寬高。使用onLayout
回調(diào)來獲得容器的高度,用來設(shè)置數(shù)字單元格的寬高。
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
是一個字符數(shù)組,用于存放數(shù)字單元格的文本內(nèi)容,它的長度是固定的。它的內(nèi)容由用戶輸入的值拆分組成,如果長度不夠,則填充空字符串""
。
export default function CodeInput({ value, length = 4 }) { const cells = value.split('').concat(Array(length - value.length).fill('')) }
開源方案
GitHub 上這個庫實現(xiàn)了比較酷炫的效果。有需要的小伙伴可以使用。
這里有一個示例,供你參考。
以上就是React Native 中實現(xiàn)確認(rèn)碼組件示例詳解的詳細(xì)內(nèi)容,更多關(guān)于React Native確認(rèn)碼組件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
react實現(xiàn)同頁面三級跳轉(zhuǎn)路由布局
這篇文章主要為大家詳細(xì)介紹了react實現(xiàn)同頁面三級跳轉(zhuǎn)路由布局,一個路由小案例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-09-09react項目中使用react-dnd實現(xiàn)列表的拖拽排序功能
這篇文章主要介紹了react項目中使用react-dnd實現(xiàn)列表的拖拽排序,本文結(jié)合實例代碼講解react-dnd是如何實現(xiàn),代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02react-redux中connect的裝飾器用法@connect詳解
這篇文章主要介紹了react-redux中connect的裝飾器用法@connect詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01React+Spring實現(xiàn)跨域問題的完美解決方法
這篇文章主要介紹了React+Spring實現(xiàn)跨域問題的完美解決方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-08-08React前端渲染優(yōu)化--父組件導(dǎo)致子組件重復(fù)渲染的問題
本篇文章是針對父組件導(dǎo)致子組件重復(fù)渲染的優(yōu)化方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08