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

React: state和setState理解

问题引入:

我们改变了isHot的值,值确实变了,但是视图没更新

解决:

React中规定:state状态不可以直接更改,要借助内置的api去更改,即:setState方法

即下面的这种方式:

 

  • 问题:setState是替代还是合并? --- 答案是合并

  • 问题:constructor调用几次?render函数调用几次?changeWeather调用几次?

答案: constructor是1次,即初始化的那次;

render是1+n次,1是初始化调用那次,n是setState调用n次,就render的次数就是n次;

changeWeather是点击几次,就调用几次。

  • 问题:构造器到底什么时候写?什么时候不写?

答案:

2个点:初始化状态的时候,要写;绑定this指向的时候要写

  •  问题:constructor里面的this.state中的state可以改成别的变量名吗?

答案:可以,比如改成this.peiqi={},但是一般约定来说都是state,因为这样命名是配合setState这个api.

  • 问题:state一定要在constructor中进行初始化吗?

答案:不是的。ES6中类中规定,可以直接在类的{}语句中,直接写赋值语句,这样相当于在类的实例中添加了某个属性,如下图:

打印结果:

 同理,state也可以直接赋值进行使用,如下图:

  • 问题:事件绑定的函数一定要在constructor函数中使用bind吗?有简化的写法吗?

答案:有的,使用箭头函数。如下图:自定义函数:赋值语句 + 箭头函数

关于State的总结:

  • state值必须是一个对象(key:value的组合)
  • 组件被称为状态机,通过改变其中的state来更新视图的重新渲染
  • 状态数据不能直接修改或更新,要通过setState这个内置api

注意:

  • 组件中的render方法中的this为实例对象
  • 组件中自定义方法的this为undefined,如何解决?
  1. 箭头函数(赋值语句+箭头函数)
  2. bind绑定this(在构造器函数中通过bind绑定)

 

 

 

相关文章:

  • React: 函数式组件如何使用props
  • VSCode在代码处显示提交记录
  • 如何去除谷歌的人机身份验证
  • git修改用户名及邮箱
  • git撤销commit 并保存之前的修改
  • git merge和git rebase区别
  • git rebase实战操作
  • mac系统如何更改用户名及头像
  • internal/modules/cjs/loader.js:883 throw err;
  • Node: 001全局对象和模块化-如何给node传递参数?
  • Node: mysql学习笔记001
  • Node: MySQL学习笔记002
  • yarn错误The engine “node“ is incompatible with this module
  • Node: 001全局对象和模块化-常见的全局对象
  • node:快速启动一个列表服务器
  • 【comparator, comparable】小总结
  • 2019年如何成为全栈工程师?
  • Android组件 - 收藏集 - 掘金
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Druid 在有赞的实践
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • maven工程打包jar以及java jar命令的classpath使用
  • 手写双向链表LinkedList的几个常用功能
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 函数计算新功能-----支持C#函数
  • #QT项目实战(天气预报)
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (4)logging(日志模块)
  • (Git) gitignore基础使用
  • (Ruby)Ubuntu12.04安装Rails环境
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET Micro Framework初体验
  • .net MVC中使用angularJs刷新页面数据列表
  • .net 中viewstate的原理和使用
  • .NET基础篇——反射的奥妙
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [2544]最短路 (两种算法)(HDU)
  • [51nod1610]路径计数
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
  • [C#]C#学习笔记-CIL和动态程序集
  • [C#]无法获取源 https://api.nuge t.org/v3-index存储签名信息解决方法
  • [C]编译和预处理详解
  • [JavaScript]_[初级]_[不使用JQuery原生Ajax提交表单文件并监听进度]
  • [JS]JavaScript 注释 输入输出语句