如何理解React受控组件Hooks方式(hooks,react,web开发)

时间:2024-05-03 07:04:50 作者 : 石家庄SEO 分类 : web开发
  • TAG :

1.受控组件

假设我们有一个简单的文本字段,并且想访问其值:

import{useState}from'react';functionMyControlledInput({}){const[value,setValue]=useState('');constonChange=(event)=>{setValue(event.target.value);}return(<><div>Inputvalue:{value}</div><inputvalue={value}onChange={onChange}/></>)}

如何理解React受控组件Hooks方式

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

input字段受到控制,因为 React 从状态设置其值。当用户在input 中输入内容时,onChange处理程序会使用从事件对象event.target.value访问的输入值来更新状态。

value变量表示用户真实输入的值。每次需要访问用户在input字段中输入的值时,只需读取value状态变量。

受控组件方法可以帮助我们访问任何输入类型的值:常规文本输入、textarea、select 等。

2. 受控组件中的3个步骤中

设置受控组件需要3个步骤:

定义保存input值的状态:const [value, setValue] = useState(")。

创建事件处理程序,该事件处理程序在值更改时更新状态:

constonChange=event=>setValue(event.target.value);

3.为input字段分配状态值,并添加事件处理程序:。

3. state 作为真实的数组源

我们看一个更复杂的例子。页面中有一组员工姓名列表。我们需要添加一个 input字段,当用户在此字段中键入内容时,员工列表将按姓名进行过滤。

functionFilteredEmployeesList({employees}){const[query,setQuery]=useState('');constonChange=event=>setQuery(event.target.value);constfilteredEmployees=employees.filter(name=>{returnname.toLowerCase().includes(query.toLowerCase());});return(<div><h3>EmployeesList</h3><inputtype="text"value={query}onChange={onChange}/><divclassName="list">{filteredEmployees.map(name=><div>{name}</div>)}</div></div>);}

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

如何理解React受控组件Hooks方式

对输入进行防抖

在前面的实现中,只要在input中输入一个字符,就会立即过滤列表。这并不总是很方便,因为在输入查询时它会分散用户的注意力。

我们通过debounce来改善用户体验:在最后一次更改后,以400毫秒的延迟过滤列表。

import{useDebouncedValue}from'./useDebouncedValue';functionFilteredEmployeesList({employees}){const[query,setQuery]=useState('');constdebouncedQuery=useDebouncedValue(query,400);constonChange=event=>setQuery(event.target.value);constfilteredEmployees=employees.filter(name=>{returnname.toLowerCase().includes(debouncedQuery.toLowerCase());});return(<div><h3>EmployeesList</h3><inputtype="text"value={query}onChange={onChange}/><divclassName="list">{filteredEmployees.map(name=><div>{name}</div>)}</div></div>);}

打开演示(https://codesandbox.io/s/affectionate-swartz-9yk2u?file=/src/App.js),然后在input中输放值进行查询。员工列表不会在你打字时进行过滤,而是在最近一次按下键400毫秒后进行过滤。

下面是useDebouncedValue()的实现

exportfunctionuseDebouncedValue(value,wait){const[debouncedValue,setDebouncedValue]=useState(value);useEffect(()=>{constid=setTimeout(()=>setDebouncedValue(value),wait);return()=>clearTimeout(id);},[value]);returndebouncedValue;}

受控组件是访问React中input字段的值的一种方便的技术。它不使用引用,而是作为访问input值的单一真实源。

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:如何理解React受控组件Hooks方式的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:数组array的5类方法有哪几种下一篇:

4 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18