当前位置: 首页 > news >正文

营销课程培训重庆 seo

营销课程培训,重庆 seo,网站服务费算什么费用,品牌高端网站设计React 受控组件理解和应用 React 受控组件 受控组件一般是指表单元素,表单的数据由React的 State 管理,更新数据时,需要手动调用setState()方法,更新数据。因为React没有类似于Vue的v-model,所以需要自己实现绑定事件…

React 受控组件理解和应用

React 受控组件

受控组件一般是指表单元素,表单的数据由React的 State 管理,更新数据时,需要手动调用setState()方法,更新数据。因为React没有类似于Vue的v-model,所以需要自己实现绑定事件。

那为什么需要使用受控组件呢?

使用受控组件可以确保表单数据与组件状态同步、便于集中管理和验证数据,同时提供灵活的事件处理机制以实现数据格式化和UI联动效果。

案例

我们在界面的输入框中输入内容,这时候你会发现这个value是只读的,无法修改,还会报错

hook.js:608 You provided a value prop to a form field without an onChange handler. This will render a read-only field. If the field should be mutable use defaultValue. Otherwise, set either onChange or readOnly. Error Component Stack

import React, { useState } from 'react';const App: React.FC = () => {const [value, setValue] = useState('')return (<><input type="text" value={value} /><div>{value}</div></>);
}export default App;

当用户输入内容的时候,value并不会自动更新,这时候就需要我们手动实现一个onChange事件来更新value。

import React, { useState } from 'react';const App: React.FC = () => {const [value, setValue] = useState('')const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {setValue(e.target.value)}return (<><input type="text" value={value} onChange={handleChange} /><div>{value}</div></>);
}export default App;

其实就是实现了一个类似Vue的v-model的机制,通过onChange事件来更新value,这样就实现了受控组件。

受控组件适用于所有表单元素,包括input、textarea、select等。但是除了input type=“file” 外,其他表单元素都推荐使用受控组件。

React 非受控组件

非受控组件指的是该表单元素不受React的State管理,表单的数据由DOM管理。通过useRef()来获取表单元素的值。

请看VCR

我们使用defaultValue来设置表单的默认值,但是你要想实时获取值,就需要使用useRef()来获取表单元素的值。跟操作DOM一样。

import React, { useState,useRef } from 'react';
const App: React.FC = () => {const value = '小满'const inputRef = useRef<HTMLInputElement>(null)const handleChange = () => {console.log(inputRef.current?.value)}return (<><input type="text" onChange={handleChange} defaultValue={value} ref={inputRef} /></>);
}export default App;

特殊的表单File

对于file类型的表单控件,它是一个特殊的组件,因为它的值只能由用户通过文件选择操作来设置,而不能通过程序直接设置。这使得它在React中的处理方式与其他表单元素有所不同。

请看VCR

如果非要把file类型设置为受控组件,他就会就行报错

hook.js:608 A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info:

报错内容大致为:

一个组件正在将一个未受控的输入控件改为受控的。这可能是由于值从未定义变为已定义,这应该不会发生。在组件的生命周期内,决定使用受控还是未受控的输入控件。

import React, { useState } from 'react';
const App: React.FC = () => {const [files,setFiles] = useState<File | null>(null)const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {setFiles(e.target.files?.[0]!)}return (<><input type="file" value={files} onChange={handleChange} /></>);
}export default App;

修改为非受控组件

import React, { useRef } from 'react';
const App: React.FC = () => {const inputRef = useRef<HTMLInputElement>(null)const handleChange = () => {console.log(inputRef.current?.files)}return (<><input type="file" ref={inputRef} onChange={handleChange} /></>);
}export default App;
http://www.yayakq.cn/news/131046/

相关文章:

  • 用jsp做电影网站的界面网页设计图片怎么变小
  • wordpress动图打开很慢深圳网站优化提供商
  • 宿迁住房和城乡建设部网站网站设计与制作软件
  • 云智网站建设公司在国外做电商网站有哪些
  • 赚钱南昌网站排名优化报价
  • 那个网站上有做婚礼布场样图的优化大师官网登录入口
  • 沧州哪里做网站php网站制作报价
  • 手机网站整站下载网站做xss过滤
  • 襄阳网站seo方法物联网今天正式开网
  • 我的世界是怎么做的视频网站台州seo全网营销
  • 专门做婚纱儿童摄影网站专做展厅设计网站
  • 大型的网站开发做网站百灵鸟
  • 嵩明县住房和城乡建设局网站十大免费开发平台app
  • 网上书城网站建设功能定位北京网站建设一般多少钱
  • 安徽鲲鹏建设集团有限公司网站做印刷厂网站
  • 如何建立一个网站平台网站东莞市住房和城乡建设局网
  • 桂林北站图片做网站用什么语言好
  • 是想建个网站 用本地做服务器昆明网站建设专家
  • 建设报名系统网站顺义顺德网站建设
  • 深圳哪里有做网站的公司商务网站建设模板
  • 布吉网站建设哪家效益快公司网站运营注意事项
  • 怎样申请建立自助网站百度推广代理商与总公司的区别
  • 怎么建立自己网站做微课常用的网站
  • 陵水网站建设哪家好做教育网站的公司
  • 信阳网站开发建设公司北京海淀的公司
  • 摄影网站的意义自己怎么注册公司网址
  • 怎么屏蔽ip段访问网站linux做网站网络课堂
  • 水果网站模版网站降权 烦
  • 如何建立营销性企业网站论文wordpress怎么修改文字
  • 泰安建材网站建设电话安徽省建设厅证件查询安全员c证