成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

React 受控組件,Hooks 方式!

開發(fā) 前端
React 提供了兩種方法來訪問input字段的值:使用受控或非受控組件。我更喜歡受控組件,因為我們可以通過組件的狀態(tài)讀取和設(shè)置input的值。

[[388260]]

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

React 提供了兩種方法來訪問input字段的值:使用受控或非受控組件。我更喜歡受控組件,因為我們可以通過組件的狀態(tài)讀取和設(shè)置input的值。

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

1.受控組件

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

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

打開示例(https://codesandbox.io/s/controlled-component-uwf8n)并在輸入框中輸入。可以看到 value 變量包含input字段中的值,并且在每次輸入新值時,它也會更新。

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

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

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

2. 受控組件中的3個步驟中

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

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

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

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

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

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

我們看一個更復(fù)雜的例子。頁面中有一組員工姓名列表。我們需要添加一個 input字段,當(dāng)用戶在此字段中鍵入內(nèi)容時,員工列表將按姓名進(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.  
  8.   return ( 
  9.     <div> 
  10.  <h2>Employees List</h2> 
  11.  <input  
  12.         type="text"  
  13.  value={query}        onChange={onChange}      /> 
  14.  <div className="list"
  15.  {filteredEmployees.map(name => <div>{name}</div>)} 
  16.  </div> 
  17.  </div> 
  18.   ); 

打開演示(https://codesandbox.io/s/gracious-dawn-29qi6?file=/src/App.js),可以自行試試。

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

在前面的實現(xiàn)中,只要在input中輸入一個字符,就會立即過濾列表。這并不總是很方便,因為在輸入查詢時它會分散用戶的注意力。

我們通過debounce來改善用戶體驗:在最后一次更改后,以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.  
  7.   const filteredEmployees = employees.filter(name => { 
  8.  return name.toLowerCase().includes(debouncedQuery.toLowerCase());  }); 
  9.  
  10.   return ( 
  11.     <div> 
  12.  <h2>Employees List</h2> 
  13.  <input  
  14.         type="text"  
  15.         value={query}  
  16.         onChange={onChange} 
  17.       /> 
  18.  <div className="list"
  19.  {filteredEmployees.map(name => <div>{name}</div>)} 
  20.  </div> 
  21.  </div> 
  22.   ); 

打開演示(https://codesandbox.io/s/affectionate-swartz-9yk2u?file=/src/App.js),然后在input中輸放值進(jìn)行查詢。員工列表不會在你打字時進(jìn)行過濾,而是在最近一次按下鍵400毫秒后進(jìn)行過濾。

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

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

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

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

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

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

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

 

責(zé)任編輯:武曉燕 來源: 大遷世界
相關(guān)推薦

2022-07-06 08:29:12

antdInput 組件

2020-10-21 08:38:47

React源碼

2019-03-13 10:10:26

React組件前端

2021-07-09 08:33:35

React組件受控

2022-07-18 09:01:58

React函數(shù)組件Hooks

2019-08-20 15:16:26

Reacthooks前端

2023-11-06 08:00:00

ReactJavaScript開發(fā)

2022-03-31 17:54:29

ReactHooks前端

2022-08-21 09:41:42

ReactVue3前端

2022-08-09 13:22:26

Hooksreactvue

2020-09-19 17:46:20

React Hooks開發(fā)函數(shù)

2020-10-28 09:12:48

React架構(gòu)Hooks

2020-03-16 10:25:49

前端React Hooks響應(yīng)式布局

2022-04-16 20:10:00

React Hookfiber框架

2022-03-22 09:09:17

HookReact前端

2023-05-11 08:57:49

ReactHooks

2022-03-16 09:17:41

函數(shù)useStaterender

2021-05-11 08:48:23

React Hooks前端

2023-05-08 07:52:29

JSXReactHooks

2022-02-10 19:15:18

React監(jiān)聽系統(tǒng)模式
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品一区二区免费看 | 免费一级欧美在线观看视频 | 成人福利在线视频 | 亚洲三级av| 亚洲精品99999 | 国产激情三区 | 精品国产91亚洲一区二区三区www | 成人免费视频网站在线观看 | 亚洲精品一区在线 | 亚洲激情综合 | 日韩在线一区二区三区 | 亚洲精品在线视频 | 91精品免费 | 综合色久 | 欧美一区久久 | 欧美一级免费看 | 国产成人精品一区二区三区在线 | 亚洲第一网站 | 精品国产一二三区 | 国产成人精品一区二区三区视频 | 久久婷婷国产香蕉 | 亚洲a毛片 | 狠狠色综合欧美激情 | 毛片网站在线观看视频 | 欧美激情久久久 | 亚洲免费人成在线视频观看 | 亚洲免费在线播放 | 一区二区三区av | 婷婷综合色 | 国产精品免费小视频 | 一区二区三区国产 | 精品久久久久一区二区国产 | 精品一区二区av | 免费视频99| 国产精品1区| 国产黄色免费网站 | 日韩一区二区三区av | 国产精品爱久久久久久久 | 日韩国产一区二区三区 | 成人av网站在线观看 | 人人做人人澡人人爽欧美 |