欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

引言

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

1. useRememberMe 鉤子函數(shù)

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

下面是完整的 hook 代碼。

// 定義一個(gè)自定義Hook,用于處理"remember me"的功能  
const useRememberMe = (initialUsername = '', initialRemember = false) => {    
  
  // 使用React的useState Hook來定義三個(gè)狀態(tài)變量:  
  // username: 用于存儲用戶名  
  // remember: 用于標(biāo)記用戶是否選擇了"remember me"選項(xiàng)  
  // isRemembered: 用于標(biāo)記用戶名是否被記?。◤膌ocalStorage中恢復(fù))  
  const [username, setUsername] = useState(initialUsername);    
  const [remember, setRemember] = useState(initialRemember);    
  const [isRemembered, setIsRemembered] = useState(false);    
  
  // 使用React的useEffect Hook,在組件掛載時(shí)執(zhí)行(僅執(zhí)行一次)  
  useEffect(() => {    
    // 從localStorage中嘗試獲取存儲的用戶名和"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只會在組件掛載時(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會重新運(yùn)行  
  
  // 返回一個(gè)對象,包含所有的狀態(tài)變量和更新狀態(tài)的方法,供組件使用  
  return {    
    username,    
    setUsername,    
    remember,    
    setRemember,    
    isRemembered,    
  };    
};   

2. 小試牛刀

下面通過一個(gè)簡單的例子來說明這個(gè) hook 的用法:

// 定義一個(gè)React函數(shù)組件,用于顯示登錄表單  
const LoginForm = () => {    
  // 使用上面定義的useRememberMe Hook,并解構(gòu)返回的對象,獲取狀態(tài)和更新狀態(tài)的方法  
  const {    
    username,    
    setUsername,    
    remember,    
    setRemember,    
    isRemembered,    
  } = useRememberMe();    
  
  // 定義一個(gè)處理表單提交的函數(shù),目前僅阻止默認(rèn)行為(即頁面刷新),具體的登錄邏輯需要在這里實(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)用中,你通常會在一個(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)來存儲或刪除 localStorage 中的用戶名和 "remember me" 的狀態(tài)。
    • 返回一個(gè)對象,包含狀態(tài)和操作這些狀態(tài)的方法,供組件使用。
  • React函數(shù)組件 LoginForm:

    • 使用useRememberMe Hook,并解構(gòu)其返回的對象,獲取狀態(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。
  • 組件的渲染:

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

4. 最終效果

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

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

登錄之后刷新頁面后的效果:

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

相關(guān)文章

  • React的Props、生命周期詳解

    React的Props、生命周期詳解

    “Props” 是 React 中用于傳遞數(shù)據(jù)給組件的一種機(jī)制,通常作為組件的參數(shù)進(jìn)行傳遞,在 React 中,props 是只讀的,意味著一旦將數(shù)據(jù)傳遞給組件的 props,組件就不能直接修改這些 props 的值,這篇文章主要介紹了React的Props、生命周期,需要的朋友可以參考下
    2024-06-06
  • react-native中ListView組件點(diǎn)擊跳轉(zhuǎn)的方法示例

    react-native中ListView組件點(diǎn)擊跳轉(zhuǎn)的方法示例

    ListView作為React Native的核心組件,用于高效地顯示一個(gè)可以垂直滾動的變化的數(shù)據(jù)列表。下面這篇文章主要給大家介紹了關(guān)于react-native中ListView組件點(diǎn)擊跳轉(zhuǎn)的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • React腳手架config-overrides.js文件的配置方式

    React腳手架config-overrides.js文件的配置方式

    這篇文章主要介紹了React腳手架config-overrides.js文件的配置方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • react vue背景掛載機(jī)器問題

    react vue背景掛載機(jī)器問題

    這篇文章主要介紹了react vue背景掛載機(jī)器問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 聊聊React onClick 傳遞參數(shù)的問題

    聊聊React onClick 傳遞參數(shù)的問題

    很多朋友向小編反映一個(gè)問題關(guān)于React onClick 傳遞參數(shù)的問題,當(dāng)點(diǎn)擊刪除按鈕需要執(zhí)行刪除操作,針對這個(gè)問題該如何處理呢?下面小編給大家?guī)砹薘eact onClick 傳遞參數(shù)的問題,感興趣的朋友一起看看吧
    2021-10-10
  • React?Hooks中?useRef和useImperativeHandle的使用方式

    React?Hooks中?useRef和useImperativeHandle的使用方式

    這篇文章主要介紹了React?Hooks中?useRef和useImperativeHandle的使用方式,文中說明了useRef和useCallback一起使用,?可以解決閉包陷阱的問題,本文結(jié)合實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • React中的JSX??{?}的使用詳解

    React中的JSX??{?}的使用詳解

    這篇文章主要介紹了React中的JSX{?}的使用,React使用JSX來替代常規(guī)的JavaScript,JSX可以理解為的JavaScript語法擴(kuò)展,它里面的標(biāo)簽申明要符合XML規(guī)范要求,對React?JSX使用感興趣的朋友一起看看吧
    2022-08-08
  • 詳解如何在React中監(jiān)聽鼠標(biāo)事件

    詳解如何在React中監(jiān)聽鼠標(biāo)事件

    React可以通過使用React事件系統(tǒng)來監(jiān)聽鼠標(biāo)事件,您可以在React組件中通過使用特定的事件處理函數(shù)來注冊和處理鼠標(biāo)事件,本文小編講給大家詳細(xì)介紹一下如何在React中監(jiān)聽鼠標(biāo)事件,需要的朋友可以參考下
    2023-09-09
  • 詳解React Native與IOS端之間的交互

    詳解React Native與IOS端之間的交互

    React Native (簡稱RN)是Facebook于2015年4月開源的跨平臺移動應(yīng)用開發(fā)框架,是Facebook早先開源的JS框架 React 在原生移動應(yīng)用平臺的衍生產(chǎn)物,支持iOS和安卓兩大平臺。本文將介紹React Native與IOS端之間的交互。
    2021-06-06
  • React利用lazy+Suspense實(shí)現(xiàn)路由懶加載

    React利用lazy+Suspense實(shí)現(xiàn)路由懶加載

    這篇文章主要為大家詳細(xì)介紹了React如何利用lazy+Suspense實(shí)現(xiàn)路由懶加載,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-06-06

最新評論