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

使用React hook實(shí)現(xiàn)remember me功能

 更新時(shí)間:2024年04月24日 08:48:42   作者:慕仲卿  
相信大家在使用 React 寫頁(yè)面的時(shí)候都遇到過(guò)完成 Remember me 的需求吧!本文就將這個(gè)需求封裝在一個(gè) React hook 中以供后續(xù)的使用,覺得有用的同學(xué)可以收藏起來(lái)以備不時(shí)之需,感興趣的小伙伴跟著小編一起來(lái)看看吧

引言

相信大家在使用 React 寫頁(yè)面的時(shí)候都遇到過(guò)完成 Remember me 的需求吧!本文就將這個(gè)需求封裝在一個(gè) React hook 中以供后續(xù)的使用,覺得有用的同學(xué)可以收藏起來(lái)以備不時(shí)之需。

1. useRememberMe 鉤子函數(shù)

在 React 中實(shí)現(xiàn)這個(gè)功能,其本質(zhì)無(wú)非就是持久化存儲(chǔ)。一般遇到這種問(wèn)題,我都是用 hook 來(lái)解決的,因?yàn)?hook 可以將很多可以復(fù)用的邏輯封裝起來(lái),所以使用 hook 處理復(fù)雜邏輯非常合適。

下面是完整的 hook 代碼。

// 定義一個(gè)自定義Hook,用于處理"remember me"的功能  
const useRememberMe = (initialUsername = '', initialRemember = false) => {    
  
  // 使用React的useState Hook來(lái)定義三個(gè)狀態(tài)變量:  
  // username: 用于存儲(chǔ)用戶名  
  // remember: 用于標(biāo)記用戶是否選擇了"remember me"選項(xiàng)  
  // isRemembered: 用于標(biāo)記用戶名是否被記住(從localStorage中恢復(fù))  
  const [username, setUsername] = useState(initialUsername);    
  const [remember, setRemember] = useState(initialRemember);    
  const [isRemembered, setIsRemembered] = useState(false);    
  
  // 使用React的useEffect Hook,在組件掛載時(shí)執(zhí)行(僅執(zhí)行一次)  
  useEffect(() => {    
    // 從localStorage中嘗試獲取存儲(chǔ)的用戶名和"remember me"的狀態(tài)  
    const storedUsername = localStorage.getItem('username');    
    const storedRemember = localStorage.getItem('remember');    
  
    // 如果用戶名存在且"remember me"被選中,則恢復(fù)這些狀態(tài)  
    if (storedUsername && storedRemember === 'true') {    
      setUsername(storedUsername);    
      setRemember(true);    
      setIsRemembered(true);    
    }    
  }, []);  // 空的依賴數(shù)組表示這個(gè)effect只會(huì)在組件掛載時(shí)運(yùn)行一次  
  
  // 另一個(gè)useEffect Hook,當(dāng)remember或username狀態(tài)變化時(shí)執(zhí)行  
  useEffect(() => {    
    // 如果用戶選擇了"remember me",則將用戶名和狀態(tài)保存到localStorage中  
    if (remember) {    
      localStorage.setItem('username', username);    
      localStorage.setItem('remember', 'true');    
    } else {    
      // 否則,從localStorage中移除這些信息  
      localStorage.removeItem('username');    
      localStorage.removeItem('remember');    
    }    
  }, [remember, username]);  // 當(dāng)remember或username變化時(shí),這個(gè)effect會(huì)重新運(yùn)行  
  
  // 返回一個(gè)對(duì)象,包含所有的狀態(tài)變量和更新狀態(tài)的方法,供組件使用  
  return {    
    username,    
    setUsername,    
    remember,    
    setRemember,    
    isRemembered,    
  };    
};   

2. 小試牛刀

下面通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明這個(gè) hook 的用法:

// 定義一個(gè)React函數(shù)組件,用于顯示登錄表單  
const LoginForm = () => {    
  // 使用上面定義的useRememberMe Hook,并解構(gòu)返回的對(duì)象,獲取狀態(tài)和更新狀態(tài)的方法  
  const {    
    username,    
    setUsername,    
    remember,    
    setRemember,    
    isRemembered,    
  } = useRememberMe();    
  
  // 定義一個(gè)處理表單提交的函數(shù),目前僅阻止默認(rèn)行為(即頁(yè)面刷新),具體的登錄邏輯需要在這里實(shí)現(xiàn)  
  const handleSubmit = (e) => {    
    e.preventDefault();    
    // 處理登錄邏輯...    
  };    
  
  // 返回JSX,描述組件的UI  
  return (    
    <form onSubmit={handleSubmit}>    
      {/* 用戶名輸入框,值與username狀態(tài)綁定,當(dāng)輸入變化時(shí)更新username狀態(tài) */}  
      <input    
        type="text"    
        placeholder="Username"    
        value={username}    
        onChange={(e) => setUsername(e.target.value)}    
      />    
      {/* 密碼輸入框,目前沒有綁定任何狀態(tài)或處理邏輯 */}  
      <input    
        type="password"    
        placeholder="Password"    
        // 你需要添加密碼狀態(tài)和處理邏輯    
      />    
      {/* "Remember me"復(fù)選框,狀態(tài)與remember綁定,當(dāng)選擇變化時(shí)更新remember狀態(tài) */}  
      <label>    
        <input    
          type="checkbox"    
          checked={remember}    
          onChange={(e) => setRemember(e.target.checked)}    
        />    
        Remember me    
      </label>    
      {/* 提交按鈕 */}  
      <button type="submit">Login</button>    
    </form>    
  );    
};    
  
// 在React應(yīng)用中渲染LoginForm組件  
// 注意:在實(shí)際應(yīng)用中,你通常會(huì)在一個(gè)父組件或路由中渲染這個(gè)組件,而不是直接這樣寫  
<LoginForm />

3. 原理解釋

  • 自定義Hook useRememberMe:

    • useRememberMe 是一個(gè)自定義Hook,用于處理"remember me"的功能。
    • 它接收兩個(gè)參數(shù):initialUsername(默認(rèn)用戶名)和initialRemember(是否默認(rèn)記住我),都有默認(rèn)值。
    • 使用useState定義了三個(gè)狀態(tài):username(用戶名)、remember(是否選擇記住我)、isRemembered(用戶名是否被記?。?。
    • 第一個(gè) useEffect 在組件掛載時(shí)從 localStorage 中恢復(fù)用戶名和 "remember me" 的狀態(tài)。
    • 第二個(gè) useEffect 根據(jù) remember 的狀態(tài)來(lái)存儲(chǔ)或刪除 localStorage 中的用戶名和 "remember me" 的狀態(tài)。
    • 返回一個(gè)對(duì)象,包含狀態(tài)和操作這些狀態(tài)的方法,供組件使用。
  • React函數(shù)組件 LoginForm:

    • 使用useRememberMe Hook,并解構(gòu)其返回的對(duì)象,獲取狀態(tài)和更新狀態(tài)的方法。
    • 定義了handleSubmit函數(shù)處理表單提交,目前僅阻止默認(rèn)行為。
    • 返回JSX描述的UI,包括用戶名輸入框、密碼輸入框、"Remember me"復(fù)選框和提交按鈕。
      • 用戶名輸入框的值與username狀態(tài)綁定,輸入變化時(shí)更新username
      • "Remember me"復(fù)選框的狀態(tài)與remember綁定,選擇變化時(shí)更新remember。
  • 組件的渲染:

    • 最后,通過(guò)<LoginForm />來(lái)渲染這個(gè)登錄表單組件。在實(shí)際應(yīng)用中,這一步通常會(huì)在一個(gè)父組件或路由中完成。

4. 最終效果

<LoginForm /> 組件渲染到頁(yè)面上之后的效果如下所示:

點(diǎn)擊登錄按鈕之前的效果:

登錄之后刷新頁(yè)面后的效果:

到此這篇關(guān)于使用React hook實(shí)現(xiàn)remember me功能的文章就介紹到這了,更多相關(guān)React remember me功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用react+redux實(shí)現(xiàn)彈出框案例

    使用react+redux實(shí)現(xiàn)彈出框案例

    這篇文章主要為大家詳細(xì)介紹了使用react+redux實(shí)現(xiàn)彈出框案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • React-Native中一些常用組件的用法詳解(一)

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

    這篇文章主要跟大家分享了關(guān)于React-Native中一些常用組件的用法,其中包括View組件、Text組件、Touchable類組件、TextInput組件以及Image組件的使用方法,分別給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來(lái)一起看看吧。
    2017-06-06
  • ReactJs實(shí)現(xiàn)樹形結(jié)構(gòu)的數(shù)據(jù)顯示的組件的示例

    ReactJs實(shí)現(xiàn)樹形結(jié)構(gòu)的數(shù)據(jù)顯示的組件的示例

    本篇文章主要介紹了ReactJs實(shí)現(xiàn)樹形結(jié)構(gòu)的數(shù)據(jù)顯示的組件的示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-08-08
  • 詳解react-refetch的使用小例子

    詳解react-refetch的使用小例子

    這篇文章主要介紹了詳解react-refetch的使用小例子,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • 解決React報(bào)錯(cuò)Expected?`onClick`?listener?to?be?a?function

    解決React報(bào)錯(cuò)Expected?`onClick`?listener?to?be?a?function

    這篇文章主要為大家介紹了React報(bào)錯(cuò)Expected?`onClick`?listener?to?be?a?function解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • react頁(yè)面中存在多個(gè)input時(shí)巧妙設(shè)置value屬性方式

    react頁(yè)面中存在多個(gè)input時(shí)巧妙設(shè)置value屬性方式

    這篇文章主要介紹了react頁(yè)面中存在多個(gè)input時(shí)巧妙設(shè)置value屬性方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 使用 React hooks 實(shí)現(xiàn)類所有生命周期

    使用 React hooks 實(shí)現(xiàn)類所有生命周期

    react 自 16.8 開始,引入了 Hooks 概念,使得函數(shù)組件中也可以擁有自己的狀態(tài),并且可以模擬對(duì)應(yīng)的生命周期,這篇文章主要介紹了使用 React hooks 怎么實(shí)現(xiàn)類里面的所有生命周期,需要的朋友可以參考下
    2023-02-02
  • 一文帶你搞懂React中的useReducer

    一文帶你搞懂React中的useReducer

    useReducer 是除useState之外另一個(gè)與狀態(tài)管理相關(guān)的 hook,這篇文章主要為大家介紹了useReducer應(yīng)用的相關(guān)知識(shí),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-06-06
  • React插槽使用方法

    React插槽使用方法

    本文主要介紹了React插槽使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 無(wú)廢話快速上手React路由開發(fā)

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

    本文以簡(jiǎn)潔為目標(biāo),幫助快速上手react-router-dom默認(rèn)你接觸過(guò)路由相關(guān)的開發(fā),通過(guò)實(shí)例代碼講解的很詳細(xì),對(duì)React路由相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-05-05

最新評(píng)論

乌兰浩特市| 黄梅县| 裕民县| 库车县| 灵璧县| 昌邑市| 黄石市| 博客| 南阳市| 庆安县| 定兴县| 临桂县| 太湖县| 宣汉县| 桓仁| 汉寿县| 万宁市| 广南县| 胶州市| 六枝特区| 原阳县| 上虞市| 彭泽县| 广宁县| 深圳市| 大余县| 卢湾区| 顺昌县| 梁平县| 三原县| 辽中县| 小金县| 大悟县| 石渠县| 陵水| 扎囊县| 阆中市| 林西县| 冕宁县| 西和县| 阿拉尔市|