首頁 > 軟體

React Native 中實現確認碼元件範例詳解

2022-08-08 22:01:42

正文

確認碼控制元件也是一個較為常見的元件了,乍一看,貌似較難實現,但實則主要是障眼法。

實現原理

上圖 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 的實現原理了。

需要注意以下幾個點:

  • 設定 TextInputautoFocus 屬性,控制進入頁面時是否自動彈出鍵盤。
  • 設定作為覆蓋物的 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確認碼元件的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com