日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
React受控組件,Hooks方式!

本文已經(jīng)過原作者 Shadeed 授權(quán)翻譯。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了仁布免費(fèi)建站歡迎大家使用!

React 提供了兩種方法來訪問input字段的值:使用受控或非受控組件。我更喜歡受控組件,因?yàn)槲覀兛梢酝ㄟ^組件的狀態(tài)讀取和設(shè)置input的值。

在這篇文章中,我們來看看如何使用React Hook 實(shí)現(xiàn)受控組件。

1.受控組件

假設(shè)我們有一個(gè)簡(jiǎn)單的文本字段,并且想訪問其值:

 
 
 
 
  1. import { useState } from 'react';
  2. function MyControlledInput({ }) {
  3.   const [ value, setValue ] = useState('');
  4.   const onChange = (event) => {
  5.     setValue(event.target.value);
  6.   }
  7.   
  8.   return (
  9.     <>
  10.         
    Input value: {value}
  11.         
  12.     
  13.   )
  14. }

打開示例(https://codesandbox.io/s/controlled-component-uwf8n)并在輸入框中輸入??梢钥吹?value 變量包含input字段中的值,并且在每次輸入新值時(shí),它也會(huì)更新。

input字段受到控制,因?yàn)?React 從狀態(tài)設(shè)置其值。當(dāng)用戶在input 中輸入內(nèi)容時(shí),onChange處理程序會(huì)使用從事件對(duì)象event.target.value訪問的輸入值來更新狀態(tài)。

value變量表示用戶真實(shí)輸入的值。每次需要訪問用戶在input字段中輸入的值時(shí),只需讀取value狀態(tài)變量。

受控組件方法可以幫助我們?cè)L問任何輸入類型的值:常規(guī)文本輸入、textarea、select 等。

2. 受控組件中的3個(gè)步驟中

設(shè)置受控組件需要3個(gè)步驟:

定義保存input值的狀態(tài):const [value, setValue] = useState(")。

創(chuàng)建事件處理程序,該事件處理程序在值更改時(shí)更新狀態(tài):

 
 
 
 
  1. const onChange = event => setValue(event.target.value);

3.為input字段分配狀態(tài)值,并添加事件處理程序:。

3. state 作為真實(shí)的數(shù)組源

我們看一個(gè)更復(fù)雜的例子。頁(yè)面中有一組員工姓名列表。我們需要添加一個(gè) input字段,當(dāng)用戶在此字段中鍵入內(nèi)容時(shí),員工列表將按姓名進(jìn)行過濾。

 
 
 
 
  1. function FilteredEmployeesList({ employees }) {
  2.  const [query, setQuery] = useState('');  
  3.  const onChange = event => setQuery(event.target.value);
  4.   const filteredEmployees = employees.filter(name => {
  5.     return name.toLowerCase().includes(query.toLowerCase());
  6.   });
  7.   return (
  8.     
  9.  

    Employees List

  10.  
  11.         type="text" 
  12.  value={query}        onChange={onChange}      />
  13.  
  14.  {filteredEmployees.map(name => 
    {name}
    )}
  15.  
  •  
  •   );
  • }
  • 打開演示(https://codesandbox.io/s/gracious-dawn-29qi6?file=/src/App.js),可以自行試試。

    對(duì)輸入進(jìn)行防抖

    在前面的實(shí)現(xiàn)中,只要在input中輸入一個(gè)字符,就會(huì)立即過濾列表。這并不總是很方便,因?yàn)樵谳斎氩樵儠r(shí)它會(huì)分散用戶的注意力。

    我們通過debounce來改善用戶體驗(yàn):在最后一次更改后,以400毫秒的延遲過濾列表。

     
     
     
     
    1. import { useDebouncedValue } from './useDebouncedValue';
    2. function FilteredEmployeesList({ employees }) {
    3.   const [query, setQuery] = useState('');
    4.  const debouncedQuery = useDebouncedValue(query, 400);  
    5.   const onChange = event => setQuery(event.target.value);
    6.   const filteredEmployees = employees.filter(name => {
    7.  return name.toLowerCase().includes(debouncedQuery.toLowerCase());  });
    8.   return (
    9.     
    10.  

      Employees List

    11.  
    12.         type="text" 
    13.         value={query} 
    14.         onChange={onChange}
    15.       />
    16.  
    17.  {filteredEmployees.map(name => 
      {name}
      )}
    18.  
  •  
  •   );
  • }
  • 打開演示(https://codesandbox.io/s/affectionate-swartz-9yk2u?file=/src/App.js),然后在input中輸放值進(jìn)行查詢。員工列表不會(huì)在你打字時(shí)進(jìn)行過濾,而是在最近一次按下鍵400毫秒后進(jìn)行過濾。

    下面是useDebouncedValue()的實(shí)現(xiàn)

     
     
     
     
    1. export function useDebouncedValue(value, wait) {
    2.   const [debouncedValue, setDebouncedValue] = useState(value);
    3.   useEffect(() => {
    4.     const id = setTimeout(() => setDebouncedValue(value), wait);
    5.     return () => clearTimeout(id);
    6.   }, [value]);
    7.   return debouncedValue;
    8. }

    受控組件是訪問React中input字段的值的一種方便的技術(shù)。它不使用引用,而是作為訪問input值的單一真實(shí)源。

    ~ 完,我們小智,我要去刷碗了,下期再見~

    作者:Shadeed 譯者:前端小智 來源:dmitripavlutin

    原文:https://dmitripavlutin.com/controlled-inputs-using-react-hooks/

    本文轉(zhuǎn)載自微信公眾號(hào)「大遷世界」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系大遷世界公眾號(hào)。


    當(dāng)前文章:React受控組件,Hooks方式!
    分享地址:http://m.5511xx.com/article/dppehse.html