问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

react表单和绑定事件及state和props-04

发布网友 发布时间:2022-11-20 06:51

我来回答

1个回答

热心网友 时间:2023-10-12 19:54

第一种方式:在事件上使用bind(this)

第二种方式:在构造函数中改变this指向

第三种方式:使用=()=>

JavaScript函数中的this不是在函数声明的时候定义的,而是在函数调用(即运行)的时候定义的。在react中也遵循这个原则,this指向该function的调用方,所以“调用者”不同会导致this的不同,这里的“调用者”指的是函数执行时的当前对象。

箭头函数或是bind会改变this的指向。上面的this.state,之所以能够访问到state就是改变了this的指向,不然getData里的this就是指向这个function,这是的this是undefined。

一般来说:
    1、谁调用的this就指向谁。
    2、箭头函数,bind改变后的指向父层。

在react中我们使用setState来更新数据:

但是console打印出来的值是:原数据。
这里就要提到react里setState的异步了,在react里setState这个方法是异步的,不会按顺序执行,它可能会等待一组state一起进行更新,来提高性能。下面提供一个解决办法,setState的回调setState(updater[, callback]),相当于componentDidUpdate函数:

因为在事件中使用onClick={this.setData()}时方法直接执行,直接写成this.setData(data)这样会报错,所以需要使用bind():

下面看如何传递:

事件对象:在出发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息。

给标签添加ref属性,在事件里通过this.refs.[属性].value来获取值

双向数据绑定在vue中有,在react中是没有的,双向数据绑定就是双方的数据改变相互影响,下面只是模拟双向数据绑定:

上面的的value需要事件监听,这里面有一个react的知识点:约束性组件和非约束性组件
约束性组件,简单说就是react管理了它的value,而非约束性组件的value是由原生DOM管理的。

约束性组件是这样写的:

这里的value属性不再是一个写死的值,它是this.state.data,而this.state.data是由this.inputDataChange这个监听事件负责管理的。
这个时候实际上 input 的 value 根本不是用户输入的内容。而是onChange 事件触发之后,由 this.setState 导致了一次重新渲染。不过React会优化这个渲染过程,实际它依然是通过设置input的value来实现的。

非约束性组件是这样写的:

这个defaultValue就是原生DOM中的value属性,其value值就是用户输入的内容,react不管理输入的过程。

对比约束性组件和非约束性组件的输入流程:
*约束性组件: 用户输入A -> 触发onChange事件 -> inputDataChange 中设置 state.name = “A” -> 渲染input使他的value变成A
*非约束性组件: 用户输入A -> input 中显示A

这里介绍form表单里的几种常用的子标签:
一般表单都是需要用form标签包起来:

1、react的组件从概念上看就是一个函数,可以接受一个参数最为输入值,这个参数就是props,可以把props理解为从外部传入组件内部的数据。
2、props经常被用作渲染组件和初始化状态,当一个组件被实例化之后,它的props是只读的,不可改变的。如果props在渲染过程中可以被改变,会导致这个组件显示的形态变得不可预测。只有通过父组件重新渲染的方式才可以把新的props传入组件中。
3、在组件中,我们最好为props中的参数设置一个defaultProps,并且制定它的类型。

一个组件的显示形态可以由数据状态和外部参数所决定,外部参数也就是props,而数据状态就是state
state的主要作用是用于组件保存、控制以及修改自己的状态,它只能在constructor中初始化,它算是组件的私有属性,不可通过外部访问和修改,只能通过组件内部的this.setState来修改,修改state属性会导致组件的重新渲染。

写在最后:

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
收到10010流调短信严重吗 麻烦哪位帮我把这张图弄小点,做QQ头像用的,字要完整哦!谢谢啦 秋冬季眼睛干涩 喝菊花茶可预防红眼病 word文档表格内容怎么清除重新编辑 如何一键清空表格内容 小米商城分期需要什么 木饰面在家装中有哪些应用?木饰面竟有大用途! 软包电视背景墙价格为什么各不一致? 淘宝黑号了多久才能白回来?淘宝黑号洗白方法是什么? 淘宝黑号有什么现象?如何分辨黑号? 压缩机备件注册商标属于哪一类? 我的冰箱和粉碎机用一个电源,有时候冰箱工作就拔电了,现在冰箱不工作了,压缩机有温度,没声音怎么办? 怎么知道别人的被封了? 怎样知道一个是不是被封了? 高中语文补写句子答题技巧有哪些 包面要煮多长时间能好 包面要煮多久 1979年10月初四中午出生的女人命运如何 属羊的199l年七月初四生人是什么命? 属羊人最富贵的出生日 农历初四财源不断 北京师范大学公费师范生2022年录取分数线是多少?(各省汇总) 联想b8000平板电脑在联网状态下老是有广告插入怎么办,重置后还是这样,求解 孟子所说的话中,能体现中华民族在危机面前不屈服,困境中求生存,逆境中求发展的句子是? - 信息提示 逆境中求生存的励志语 在困境中谋求发展 牛奶可以每天敷面吗 员工离职通告客户 公司高层离职公告 为什么有的网站有.com.cn有的只有.cn还有的有.net,三者有什么区别? 联想电子产品的质量为何如此之差? React中关键字与名词解释 react 中useRef 循环获取ref值 躺在床上玩手机用单手比较好还是双手? 安卓手机如何打开.tjs文件 怎样在手机上玩pc黄油游戏? 骨质疏松应该吃些什么? 联想n480怎么还原系统因为忘记了密码 罐头使用方法说的是在沸水中加热20分钟后取出那还会爆炸吗? 劳动合同上工资一栏薪酬协议的依据是什么 跪求:比英语四级难度稍低的阅读理解若干篇 qq音乐如何只买一个月的会员 魔兽怀旧服wlk附魔用哪种羊皮纸 怀旧服猎人弓附魔什么 猎人弓附魔最好的装备 孕妇梦见写粉笔字是什么意思? 金牛座好还是摩羯座好 金牛与摩羯谁更胜一筹,摩羯男为啥深爱金牛女呢? 金牛座和摩羯座,究竟哪个星座更强大? 金牛和摩羯谁聪明 40分钟来得及登机吗 为什么我现在用手机360下载软件,下载成功了,但是在手机上找不到软件图标?