翼度科技»论坛 编程开发 JavaScript 查看内容

react中value与defaultValue的区别及说明

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
react中value与defaultValue的区别

在日常开发的过程中,我们经常会使用input输入框,有时会需要使用value绑定数据,针对这一点,react提出了一个概念,分为了约束性组件和非约束性组件。
之前正常使用的时候我们只需要这样写:
  1. <input value={绑定的数据} type='text'/>
复制代码
在react中这样的写法会出现一个错误,提示你应该使用onChange来监听这个input或者使用defaultValue来绑定数据。这样可以消除这个错误。
那么当使用defaultValue的时候:
  1. <input  defaultValue={绑定的数据} type='text'/>
复制代码
这个时候就是一个非约束性组件,其实就是原生DOM中的value属性,这样写出来的组件,其value值就是用户输入的内容,和react没有关系,完全不管输入的过程。
当使用onChange的时候:
  1. <input value={绑定的数据} type="text" onChange={this.handleChange}/>
复制代码
这个时候就是一个约束性组件,这里value不再是写死的值,他是你所绑定的数据,绑定的数据是由this.handleChange负责管理的。这个时候实际上input的value根本不是用户输入的内容。而是onChange事件触发之后,由this.state导致了一次重新渲染,不过react会优化这个过程。
注意:
如果在使用input时只需要获取model里的值时,使用defaultValue就可以了。
如果需要获取model的值并且还需要改变它的时候,就需要使用value结合onChange事件就可以了。

react select标签defaultValue和value踩坑日记

最近在写react项目,需要设置下拉框默认值.

第一版本

使用defaultValue,发现刷新页面,数据错误
分析:defaultValue只在页面挂载时渲染一次,后续数据发生变化,不再重新渲染
  1. <div className="month">
  2.     <select defaultValue="dayjs().get("month")" onChange={(e) => onChange(e)}>
  3.         {months.map(month => <option key={month} value={month} >{month}</option>)}
  4.     </select>
  5.     月
  6. </div>
复制代码
第二版

修改为value,点击select,发现数据更新了,但页面不更新;
分析:value需要接收一个动态数据,dayjs().get(“month”)是一个死值。
  1. <div className="month">
  2.     <select value="dayjs().get("month")" onChange={(e) => onChange(e)}>
  3.         {months.map(month => <option key={month} value={month} >{month}</option>)}
  4.     </select>
  5.     月
  6. </div>
复制代码
第三版

使用value绑定动态数据,且绑定onChange监听函数
  1.     const onChange = (e: React.ChangeEvent<HTMLSelectElement>) => {
  2.         let date = e.target.value
  3.         if (date.length === 4) {
  4.             setSelectDate({
  5.                 year: date,
  6.                 month: selectDate.month
  7.             })
  8.         } else {
  9.             setSelectDate({
  10.                 year: selectDate.year,
  11.                 month: date
  12.             })
  13.         }
  14.     }
  15. <div className="month">
  16.     <select value={selectDate.month} onChange={(e) => onChange(e)}>
  17.         {months.map(month => <option key={month} value={month} >{month}</option>)}
  18.     </select>
  19.     月
  20. </div>
复制代码
总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://www.jb51.net/article/284073.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具