最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React實現(xiàn)基于Antd密碼強度校驗組件示例詳解

 更新時間:2023年01月17日 11:42:01   作者:白霧茫茫丶  
這篇文章主要為大家介紹了React實現(xiàn)基于Antd密碼強度校驗組件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

最近在開發(fā) NestUmi 技術(shù)棧的個人項目,在用戶管理模塊需要用到一個密碼強度校驗組件,在網(wǎng)上尋找一方資料,沒有找到自己想要的,特此自己造輪子!

效果預(yù)覽

組件思想

  • 既然是密碼強度校驗,那么強度就必須有個梯度,這個時候就必須找到一個合適的效果。
  • 我們有兩種方向:① 組件庫找個合適的 UI , ② 自己開發(fā)造輪子
  • 經(jīng)過一番摸索, AntdProgress 組件進入了我的視野:

于是我決定基于這個組件改造一番!

組件開發(fā)

  • 在目錄 /src/components 新建 StrengthMeter/index.tsx 文件,開發(fā)基本結(jié)構(gòu)。
/*
 * @Description: 密碼強度組件
 * @Version: 2.0
 * @Author: Cyan
 * @Date: 2023-01-09 17:15:19
 * @LastEditors: Cyan
 * @LastEditTime: 2023-01-16 15:40:45
 */
import type { FC } from 'react'
import { Progress, Form, Row, Col } from 'antd';
import { ProFormText } from '@ant-design/pro-components'; // antd 高級組件
import zxcvbn from 'zxcvbn'; // 密碼強度校驗
const StrengthMeter: FC = () => {
  // 獲取上下文 form 實例
  const form = Form.useFormInstance();
  // 監(jiān)聽密碼的改變
  const password = Form.useWatch('password', form);
  /**
   * @description: 監(jiān)聽密碼強度相應(yīng)變化
   * @param {string} password
   * @return {*}
   * @author: Cyan
   */
  const watchStrength = (password: string): number => {
    const analysisValue = zxcvbn(password)
    // score得分只有0~4,且只有整數(shù)范圍并沒有小數(shù)
    return (analysisValue.score + 1) * 20
  }
  return (
    <>
      {/* 密碼 */}
      <ProFormText.Password
        label="密碼"
        name="password"
        rules={[{ required: true, min: 6, max: 12, message: "請輸入密碼" }]}
      />
      {/* 確認密碼 */}
      <ProFormText.Password
        label="確認密碼"
        name="confirmPassword"
        fieldProps={{ visibilityToggle: false }}
        rules={[
          { required: true, message: "請輸入確認密碼" },
          ({ getFieldValue }) => ({
            validator(_, value) {
              if (!value || getFieldValue('password') === value) {
                return Promise.resolve();
              }
              return Promise.reject(new Error("兩次密碼輸入不一致"));
            },
          })
        ]}
      />
      {/* 顯示密碼強度 */}
      <Progress
        percent={password ? watchStrength(password) : 0}
        steps={5}
        strokeColor={['#e74242', '#EFBD47', '#ffa500', '#1bbf1b', '#008000']}
        showInfo={false}
      />
      <Row justify="space-around">
        {
          ['非常弱', '弱', '一般', '強', '非常強'].map(value => <Col span={4} key={value}>{value}  </Col>)
        }
      </Row>
    </>
  )
}
export default StrengthMeter
  • 此時的效果是這樣的:

由于 Progressant-progress-steps-item 無法自動撐開,我們需要新建一個 index.module.less 文件做樣式穿透:

.process-steps{
  width:100%;
  text-align: center;
  :global(.ant-progress){
    width:100%
  }
  :global(.ant-progress .ant-progress-steps-item){
    width:calc(20% - 2px) !important
  }
}

然后引入樣式并綁定類名:

import styles from './index.module.less'
<div className={styles['process-steps']}>
    <Progress
      percent={password ? watchStrength(password) : 0}
      steps={5}
      strokeColor={['#e74242', '#EFBD47', '#ffa500', '#1bbf1b', '#008000']}
      showInfo={false}
    />
</div>
<Row justify="space-around" className={styles['process-steps']}>
    {
      ['非常弱', '弱', '一般', '強', '非常強'].map(value => <Col span={4} key={value}>{value}</Col>)
    }
</Row>

這時候就能得到我們想要的效果了,接下來我們要校驗密碼強度。
3. 這里我們要用到一個庫:zxcvbn,頁面引入

import zxcvbn from 'zxcvbn';

zxcvbn 是個函數(shù),接收一個參數(shù),參數(shù)就是字符串密碼。

zxcvbn("abc123456");

該函數(shù)返回一個對象,其中與密碼強度相關(guān)的屬性有:guesses、guesses_log10score。

那么這三個屬性,我們應(yīng)該怎么選擇呢?

①: guesses 值很大,不利于我們判斷。

②: guesses_log10 的值越大越安全,根據(jù)測試,值在 12 以上就很安全了。

③: score 的取值范圍只有整數(shù) 0~4,值越大越安全。

如果業(yè)務(wù)考慮的場景比較多,建議使用 guesses_log10,這里我們封裝使用 score。

4. 使用 Form.useWatch 監(jiān)聽 password 的變化:

// 獲取上下文 form 實例
const form = Form.useFormInstance();
// 監(jiān)聽密碼的改變
const password = Form.useWatch('password', form);

編寫一個函數(shù)解析 password

const watchStrength = (password: string): number => {
    const analysisValue = zxcvbn(password)
    // score得分只有0~4,且只有整數(shù)范圍并沒有小數(shù)
    return (analysisValue.score + 1) * 20
}

綁定到 Progress 組件:

<Progress
  percent={password ? watchStrength(password) : 0}
  steps={5}
  strokeColor={['#e74242', '#EFBD47', '#ffa500', '#1bbf1b', '#008000']}
  showInfo={false}
/>

到這里,我們的任務(wù)就完成了,我們一起看看實際效果吧:

倉庫地址:Xmw-Admin

以上就是React實現(xiàn)基于Antd密碼強度校驗組件示例詳解的詳細內(nèi)容,更多關(guān)于React Antd密碼強度校驗的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • React聲明組件的方法總結(jié)

    React聲明組件的方法總結(jié)

    這篇文章主要給大家介紹了react聲明組件有哪幾種方法,各有什么不同,文章通過代碼示例介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-11-11
  • react組件多次渲染問題的解決

    react組件多次渲染問題的解決

    本文主要介紹了react組件多次渲染問題的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • React可定制黑暗模式切換開關(guān)組件

    React可定制黑暗模式切換開關(guān)組件

    這篇文章主要為大家介紹了React可定制黑暗模式切換開關(guān)組件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • React項目搭建與Echarts工具使用詳解

    React項目搭建與Echarts工具使用詳解

    這篇文章主要介紹了React項目搭建與Echarts工具使用詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • 手挽手帶你學(xué)React之React-router4.x的使用

    手挽手帶你學(xué)React之React-router4.x的使用

    這篇文章主要介紹了手挽手帶你學(xué)React之React-router4.x的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • react自動化構(gòu)建路由的實現(xiàn)

    react自動化構(gòu)建路由的實現(xiàn)

    這篇文章主要介紹了react自動化構(gòu)建路由的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • react-router中<Link/>的屬性詳解

    react-router中<Link/>的屬性詳解

    這篇文章主要給大家介紹了關(guān)于react-router中<Link/>屬性的相關(guān)資料,文中介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • React-Native中一些常用組件的用法詳解(一)

    React-Native中一些常用組件的用法詳解(一)

    這篇文章主要跟大家分享了關(guān)于React-Native中一些常用組件的用法,其中包括View組件、Text組件、Touchable類組件、TextInput組件以及Image組件的使用方法,分別給出了詳細的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來一起看看吧。
    2017-06-06
  • 無廢話快速上手React路由開發(fā)

    無廢話快速上手React路由開發(fā)

    本文以簡潔為目標(biāo),幫助快速上手react-router-dom默認你接觸過路由相關(guān)的開發(fā),通過實例代碼講解的很詳細,對React路由相關(guān)知識感興趣的朋友一起看看吧
    2021-05-05
  • useEffect?返回函數(shù)執(zhí)行過程源碼解析

    useEffect?返回函數(shù)執(zhí)行過程源碼解析

    這篇文章主要為大家介紹了useEffect?返回函數(shù)執(zhí)行過程源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04

最新評論

泰安市| 淮南市| 鲁山县| 平顺县| 宁阳县| 滕州市| 璧山县| 德格县| 佛冈县| 重庆市| 元谋县| 阿合奇县| 玉林市| 济阳县| 岗巴县| 伊宁市| 城固县| 祁阳县| 永康市| 鹿泉市| 五华县| 昌黎县| 兴海县| 娄底市| 锡林郭勒盟| 邹平县| 邯郸市| 南阳市| 宜君县| 高要市| 临猗县| 民县| 渭南市| 呼玛县| 仁布县| 珲春市| 临湘市| 蒲城县| 台东市| 新宁县| 阆中市|