文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

react中value与defaultValue的区别及说明

2023-05-20 05:15

关注

react中value与defaultValue的区别

在日常开发的过程中,我们经常会使用input输入框,有时会需要使用value绑定数据,针对这一点,react提出了一个概念,分为了约束性组件和非约束性组件。

之前正常使用的时候我们只需要这样写:

<input value={绑定的数据} type='text'/>

在react中这样的写法会出现一个错误,提示你应该使用onChange来监听这个input或者使用defaultValue来绑定数据。这样可以消除这个错误。

那么当使用defaultValue的时候:

<input  defaultValue={绑定的数据} type='text'/>

这个时候就是一个非约束性组件,其实就是原生DOM中的value属性,这样写出来的组件,其value值就是用户输入的内容,和react没有关系,完全不管输入的过程。

当使用onChange的时候:

<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只在页面挂载时渲染一次,后续数据发生变化,不再重新渲染

<div className="month">
    <select defaultValue="dayjs().get("month")" onChange={(e) => onChange(e)}>
        {months.map(month => <option key={month} value={month} >{month}</option>)}
    </select>
    月
</div>

第二版

修改为value,点击select,发现数据更新了,但页面不更新;

分析:value需要接收一个动态数据,dayjs().get(“month”)是一个死值。

<div className="month">
    <select value="dayjs().get("month")" onChange={(e) => onChange(e)}>
        {months.map(month => <option key={month} value={month} >{month}</option>)}
    </select>
    月
</div>

第三版

使用value绑定动态数据,且绑定onChange监听函数

    const onChange = (e: React.ChangeEvent<HTMLSelectElement>) => {
        let date = e.target.value
        if (date.length === 4) {
            setSelectDate({
                year: date,
                month: selectDate.month
            })
        } else {
            setSelectDate({
                year: selectDate.year,
                month: date
            })
        }
    }
<div className="month">
    <select value={selectDate.month} onChange={(e) => onChange(e)}>
        {months.map(month => <option key={month} value={month} >{month}</option>)}
    </select>
    月
</div>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯