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

React特征學(xué)習(xí)Form數(shù)據(jù)管理示例詳解

 更新時間:2022年09月17日 15:39:54   作者:Flag還是要立的  
這篇文章主要為大家介紹了React特征學(xué)習(xí)Form數(shù)據(jù)管理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

Form數(shù)據(jù)管理

有時會遇到多個位置需要用戶輸入的情況,若每個狀態(tài)都配置state或handler會很繁瑣,可以嘗試下面的方法

import * as React from 'react';
const LoginForm = () => {
  // 將多個狀態(tài)合并為對象
  const [state, setState] = React.useState({
    email: '',
    password: '',
  });
  // 通過單個handler統(tǒng)一管理
  const handleChange = (e) => {
    setState({
      ...state,
      [e.target.id]: e.target.value,
    });
  };
  const handleSubmit = (e) => {
    e.preventDefault();
    alert(state.email + ' ' + state.password);
  };
  return (
    <form onSubmit={handleSubmit}>
      <div>
        <label htmlFor="email">Email</label>
        <input
          id="email"
          type="text"
          value={state.email}
          onChange={handleChange}
        />
      </div>
      <div>
        <label htmlFor="password">Password</label>
        <input
          id="password"
          type="password"
          value={state.password}
          onChange={handleChange}
        />
      </div>
      <button type="submit">Submit</button>
    </form>
  );
};
export { LoginForm };

重置Form狀態(tài)

由于每次用戶輸入后都需要數(shù)據(jù)重置回初始狀態(tài),可以使用以下方法來預(yù)設(shè)初始值,并重置Form內(nèi)容,方便新用戶的再次輸入

import * as React from 'react';
const LoginForm = () => {
  // 初始
  const [state, setState] = React.useState({
    // 設(shè)置初始值
    email: '123@456.com',
    password: '12345',
  });
  const handleChange = (e) => {
    setState({
      ...state,
      [e.target.id]: e.target.value,
    });
  };
  const handleSubmit = (e) => {
    e.preventDefault();
    // 在這里重置狀態(tài)
    setState({
      email: '',
      password: '',
    });
    alert(state.email + ' ' + state.password);
  };
  return (
    <form onSubmit={handleSubmit}>
      <div>
        <label htmlFor="email">Email</label>
        <input
          id="email"
          type="text"
          value={state.email}
          onChange={handleChange}
        />
      </div>
      <div>
        <label htmlFor="password">Password</label>
        <input
          id="password"
          type="password"
          value={state.password}
          onChange={handleChange}
        />
      </div>
      <button type="submit">Submit</button>
    </form>
  );
};
export { LoginForm };

屏幕顯示如下,submit后 Form內(nèi)容會被重置

也可以考慮設(shè)置一個變量來統(tǒng)一管理初始值,方便對狀態(tài)的查找和維護

import * as React from 'react';
const LoginForm = () => {
  // 定義初始值
  const INITIAL_STATE = {
    email: '',
    password: '',
  };
  const [state, setState] = React.useState(INITIAL_STATE);
  const handleChange = (e) => {
    setState({
      ...state,
      [e.target.id]: e.target.value,
    });
  };
  const handleSubmit = (e) => {
    e.preventDefault();
    // 重置初始值
    setState(INITIAL_STATE);
  };
  return (
    <form onSubmit={handleSubmit}>
      <div>
        <label htmlFor="email">Email</label>
        <input
          id="email"
          type="text"
          value={state.email}
          onChange={handleChange}
        />
      </div>
      <div>
        <label htmlFor="password">Password</label>
        <input
          id="password"
          type="password"
          value={state.password}
          onChange={handleChange}
        />
      </div>
      <button type="submit">Submit</button>
    </form>
  );
};
export { LoginForm };

form驗證

驗證Form的輸入是不可或缺的流程,可參考以下方案

import * as React from 'react';
const LoginForm = () => {
  const INITIAL_STATE = {
    email: '',
    password: '',
  };
  // 設(shè)置Validation要求
  const VALIDATION = {
    email: [
      {
        isValid: (value) => !!value,
        message: 'Is required.',
      },
      {
        isValid: (value) => /\S+@\S+\.\S+/.test(value),
        message: 'Needs to be an email.',
      },
    ],
    password: [
      {
        isValid: (value) => !!value,
        message: 'Is required.',
      },
    ],
  };
  // 獲取ErrorsFields
  const getErrorState = (state) =>
    Object.keys(state).reduce((acc, key) => {
      if (!VALIDATION[key]) return acc;
      const errorsPerField = VALIDATION[key].map((validation) => ({
          isValid: validation.isValid(state[key]),
          message: validation.message,
        })).filter((errorPerField) => !errorPerField.isValid);
      return { ...acc, [key]: errorsPerField };
    }, {});
  const [state, setState] = React.useState(INITIAL_STATE);
  // 設(shè)置錯誤信息變量
  const errorState = getErrorState(state);
  console.log(errorState);
  const handleChange = (e) => {
    setState({
      ...state,
      [e.target.id]: e.target.value,
    });
  };
  const handleSubmit = (e) => {
    e.preventDefault();
    // 獲取錯誤反饋
    const hasErrors = Object.values(errorFields).flat().length > 0;
    if (hasErrors) return;
    setState(INITIAL_STATE);
  };
  return (
    <form onSubmit={handleSubmit}>
      <div>
        <label htmlFor="email">Email</label>
        <input
          id="email"
          type="text"
          value={state.email}
          onChange={handleChange}
        />
         {/* 顯示email錯誤 */}
        {errorState.email?.length ? (
          <span style={{ color: 'red' }}>
            {errorState.email[0].message}
          </span>
        ) : null}
      </div>
      <div>
        <label htmlFor="password">Password</label>
        <input
          id="password"
          type="password"
          value={state.password}
          onChange={handleChange}
        />
        {/* 顯示password錯誤 */}
        {errorState.password?.length ? (
          <span style={{ color: 'red' }}>
            {errorState.password[0].message}
          </span>
        ) : null}
      </div>
      <button type="submit">Submit</button>
    </form>
  );
};
export { LoginForm };

效果顯示如下

小結(jié)

到這里完成一個簡易的React Login Form, 然而現(xiàn)實中React Form的問題還有很多, 隨著學(xué)習(xí)的深入,會繼續(xù)探索Form實用的復(fù)雜性,更多關(guān)于React特征Form數(shù)據(jù)管理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • React實現(xiàn)響應(yīng)式布局的最佳實踐

    React實現(xiàn)響應(yīng)式布局的最佳實踐

    在當(dāng)今的前端開發(fā)中,響應(yīng)式設(shè)計已經(jīng)成為必不可少的部分,隨著各種設(shè)備的出現(xiàn),確保我們的網(wǎng)頁在不同屏幕尺寸上展示良好,已經(jīng)成為開發(fā)者的首要任務(wù)之一,本文將介紹如何在React中實現(xiàn)響應(yīng)式布局,提供一些最佳實踐和示例代碼,幫助大家更好地理解這一概念
    2025-02-02
  • React Markdown配置示例

    React Markdown配置示例

    React-Markdown 是一個基于 React 的 Markdown 渲染組件庫,其核心設(shè)計理念是通過 Unified 生態(tài)系統(tǒng)實現(xiàn)安全、可擴展的 Markdown 解析
    2025-04-04
  • React實現(xiàn)雙滑塊交叉滑動

    React實現(xiàn)雙滑塊交叉滑動

    這篇文章主要為大家詳細介紹了React實現(xiàn)雙滑塊交叉滑動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 使用React組件編寫溫度顯示器

    使用React組件編寫溫度顯示器

    這篇文章主要為大家詳細介紹了使用React組件編寫溫度顯示器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • React Zustand狀態(tài)管理庫的使用詳解

    React Zustand狀態(tài)管理庫的使用詳解

    Zustand是一個為React和瀏覽器環(huán)境設(shè)計的輕量級狀態(tài)管理庫,由Vercel開發(fā),它特點包括輕量級、易用性、靈活性、可組合性和性能優(yōu)化,支持多種狀態(tài)管理模式和中間件,適合中小型項目,Zustand還支持TypeScript,提供類型安全的支持
    2024-09-09
  • react使用CSS實現(xiàn)react動畫功能示例

    react使用CSS實現(xiàn)react動畫功能示例

    這篇文章主要介紹了react使用CSS實現(xiàn)react動畫功能,結(jié)合實例形式分析了react使用CSS實現(xiàn)react動畫功能具體步驟與實現(xiàn)方法,需要的朋友可以參考下
    2020-05-05
  • 阿里低代碼框架lowcode-engine設(shè)置默認容器詳解

    阿里低代碼框架lowcode-engine設(shè)置默認容器詳解

    這篇文章主要為大家介紹了阿里低代碼框架lowcode-engine設(shè)置默認容器詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 解決配置setupProxy.js代理,頁面報錯404問題

    解決配置setupProxy.js代理,頁面報錯404問題

    這篇文章主要介紹了解決配置setupProxy.js代理,頁面報錯404問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • react中實現(xiàn)將一個視頻流為m3u8格式的轉(zhuǎn)換

    react中實現(xiàn)將一個視頻流為m3u8格式的轉(zhuǎn)換

    這篇文章主要介紹了react中實現(xiàn)將一個視頻流為m3u8格式的轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • react-router?v6實現(xiàn)權(quán)限管理+自動替換頁面標題的案例

    react-router?v6實現(xiàn)權(quán)限管理+自動替換頁面標題的案例

    這篇文章主要介紹了react-router?v6實現(xiàn)權(quán)限管理+自動替換頁面標題,這次項目是有三種權(quán)限,分別是用戶,商家以及管理員,這次寫的權(quán)限管理是高級權(quán)限能訪問低級權(quán)限的所有頁面,但是低級權(quán)限不能訪問高級權(quán)限的頁面,需要的朋友可以參考下
    2023-05-05

最新評論

长治市| 北宁市| 旌德县| 延安市| 安图县| 宁安市| 江源县| 玉屏| 鱼台县| 通州区| 探索| 石门县| 新郑市| 马山县| 西吉县| 霍城县| 天峻县| 改则县| 玛纳斯县| 西安市| 泽库县| 青龙| 定边县| 奎屯市| 灵武市| 连江县| 岚皋县| 闽侯县| 正安县| 河池市| 奉化市| 三亚市| 辽中县| 枣庄市| 雅安市| 武定县| 巩义市| 达州市| 大理市| 石屏县| 西乡县|