react 学习记录

自己学习,记录便于后面回顾

基础知识点的记忆:

  • state与props
  • state是组件自己的数据,而props是父组件通过属性赋值方式将其传送给组件;这样达到了,父子组件数据的联通
  • state的赋值方式,推荐用函数式赋值

    this.setState(() => ({react: 'i like'
    }))
  • setState是一个异步函数,并且多次setSate,会将其放入队列中,合并成一次进行执行
  • 正因为是异步的函数,所以当我们改变后不能在同步的代码中直接获取,有两种方式可以解决

    constructor() {this.state = {react: ''}
    }
    this.setState((preState) => ({react: 'i very like'
    }))
    this.setState((preState) => ({                   //react: preState.react + '我很喜欢react'
    }))
    this.state.react   //不会变化,是空
    this.setState((preState) => ({react: preState.react + '我很喜欢react'
    }), () => {console.log(this.state.react)              //这边回调的this指向组件自身,而且获取到最新的state
    })

    上面setState函数中有两个参数,第一个参数是一个函数,会自动将最近修改的最新的state,传入进来;第二个参数是一个也是函数,this指向组件自身;两个函数的执行都是异步的,因为setState就是一个异步函数

  • 而子组件怎么想父组件传送数据呢?这通过父组件先子组件赋值方法,子组件通过调用父组件的方法,来达到将其数据返回给父组件,所以最终props的数据还是在父组件的方法中
  • 组件的显示是有什么决定的,就是render,return的结果,return结果中有用到jsx对象,则需要引入import React from 'react'
  • return中的jsx组件只能被一个div包裹,组件不能并列;但可以通过<Fragment></Fragment>来占位,优点是其不会显示在dom节点中
  • 怎么不转译html形式的文本,dangerouslySetInnerHTML = {{ __html: xxx}};第一层{}是说明里面要填写js语句,第二层则是说明写的是一个对象,整句话的意思就是innerHTML=XXX

生命周期函数

什么事生命周期函数:就是说在某个阶段会自动执行的函数,叫做生命周期函数;

  • Mounting阶段

    constructor:用于初始化state,一个组件只执行一次
     static getDerivedStateFromProps(props, state);需要返回一个对象或者null,不能返回undefined;该函数的作用是可以用父组件传进来的props的值在render之前进行修改;该函数在state修改update的时候也会执行
    render函数,不是Component内置的函数,所以这个生命函数必须要写;用于创建虚拟dom,即js对象
    componentDidMount;在组件挂载完后进行的操作,只执行一次,就在挂载的最后阶段;一般在这个阶段进行ajax请求;在这个阶段修改了state的值,上面的两个函数render和getDerivedStateFromProps也会在再次执行
  • updating阶段
    就是当组件的state发生改变的时候会再次执行一些生命周期函数
    会先执行getDerivedStateFromProps;接着shouldComponentUpdate(nextProps, nextState),参数是最新的数据nextState和nextProps,可以和之前的this.state,this.props进行操作比较询问是否允许进行更新返回一个布尔值,false则不需更新,后面的生命周期函数不会再自动执行这个false常用来提升性能,因为父组件更新state时,子组件的render函数也会被执行,我们返回false,就不会执行没必要的子组件的render,提高了性能,返会true则,会进行下一个函数render。虚拟dom的构建;在组件渲染到网页前会执行一个getSnapshotBeforeUpdate(prevProps, prevState)这个函数必须和componentDidUpdate(prevProps, prevState, snapshot)一起使用;该函数在组件更新完后会自动执行,第三个参数是getSnapshotBeforeUpdate的返回值
  • Unmounting阶段
    发生在组件的删除前,会自动执行,我们常用于清除组件之前被添加的还会继续执行的东西。例如定时器

虚拟dom

只理解了一些简单的概念:虚拟dom就是js对象,是替代真实dom,让js更加高效的进行操作;
state发生update后render函数会生成新的虚拟dom,来和之前之前老的虚拟dom进行比较:
主要采取几种策略:

  • 同层比较,说白话就是从大头才是比较,大头坏了整个不要了,重新创建;这种方法再第一层不同,后面都相同的情况下,会带来性能的降低,因为它会重新渲染创建;但是提高的算法的速度,很简单就一层一层的比较,不用循环递归;放弃了一些极端情况,带来了算法上的提高
  • key值的对组件标识,通过标识来观察新旧组件,是否一致,缺少了或增加了一目了然

react基础学习记录一相关推荐

  1. react 基础学习

    react 基础学习 采用的编程软件是vsCode 安装Simple React Snippets插件 目录组成结构 src/index.js 命令注释 src/app.js 命令注释 注意: 所有命 ...

  2. HTML基础学习记录

    HTML基础学习记录 一.HTML的学习 1.网页的组成 2.HTML是什么 2.HTML特点 3.HTML基本结构 4.HTML标签语法 (1)< html >标签 (2)< he ...

  3. 无线通信零基础学习记录(2)——GSM空中接口物理层的设计

    无线通信零基础学习记录(2)--GSM空中接口物理层的设计 本章解释清楚了之前未搞懂的名词,如时隙等,以及各种信道类型,在此一并总结. TDMA空中接口技术 时分多址(TDMA,Time Divisi ...

  4. 主线剧情01-ARM-IMX6ULL基础学习记录

    ARM & i.MX6ULL 基础学习记录 编辑整理 by Staok 本文大部分内容摘自"100ask imx6ull"开发板的配套资料(如<IMX6ULL裸机开发 ...

  5. R语言基础学习记录4:重要函数

    时间: 2018-07-18(学习) 2018-07-22(学习记录) 教程:慕课网 <R语言基础> 讲师:Angelayuan 补充内容: R语言常用函数总结大全.gl()函数 学习内容 ...

  6. React基础学习(一)

    一.虚拟DOM和真实DOM <script type="text/babel"> // 此处一定要写babel!!!!!!!// 1. 创建虚拟DOM// const ...

  7. React基础学习视频

    React最新基础学习视频 1.网址:https://www.bilibili.com/video/BV1hE411c7L1?p=1 2.最近我越来越喜欢在b站学习,和看视频了,真的有很多好东西. 3 ...

  8. vue基础学习记录(一)

    根据B站黑马程序员 VUE教程基础学习 为了毕业设计做准备 Vue基础 工具准备 Vue的基本使用步骤 vue模板语法 `v-cloak`指令用法 数据绑定指令 数据响应式 双向数据绑定 MVVM设计 ...

  9. Go基础学习记录 - 编写Web应用程 - 完善Blog Model

    完善Blog Model 前面的章节 我们分别介绍了MySQL.SQLite.PostgreSQL等数据库的使用 本节简单介绍并完善下我们自己的小博客的Model部分,这部分暂时先分享下Blog Mo ...

最新文章

  1. Java垃圾回收之新生代垃圾收集器
  2. 曹原获奖了,不是他终于有资格获奖,是奖终于有机会颁给他
  3. c++ char数组和char*
  4. 还在到处集五福?支付宝其实埋了一个鲜为人知的集福利器!
  5. 200819C阶段一C++面向对象的编程思想
  6. [GXOI/GZOI2019]旧词——树链剖分+线段树
  7. vba 将html转换excel,利用VBA将不同格式excel模板之间进行数据转换实例
  8. 9.2-控制单元CU的功能(学习笔记)
  9. 医院门诊管理系统php文献,医院门诊管理系统(源码+系统)
  10. chorme 下载文件 保留 放弃_怎样避免Chrome扫描下载文件
  11. 计算机网络网线制作教案,制作网线教案.doc
  12. Windows下的Rsync(cwRsync)
  13. Windows 自带计算器的使用
  14. 闪讯 padavan 配置
  15. matlab冒号分号区别,matlab : 关于冒号 用法大全以及实例
  16. 机械制造工艺及计算机辅助工艺设计,《机械制造工艺及计算机辅助工艺设计》曾淑畅著【摘要 书评 在线阅读】-苏宁易购图书...
  17. 嫦娥四号工程总共投入是多少?国家航天局回应
  18. ElasticSearch聚合
  19. 联想小新java_联想小新700 i7 完美efi 黑果 mac 10.14
  20. python体测成绩数据分析_【Python数据分析】四级成绩分布 -matplotlib,xlrd 应用

热门文章

  1. 成为顶尖架构师必须要面对的面试题
  2. gitlab简单使用教程【转】
  3. 通过Xshell来访问和连接Linux
  4. [转]本地图片预览二三事
  5. ECMAScript:客户端脚本语言的标准
  6. php限制接口访问次数_令牌桶限流思路分享(PHP+Redis实现机制)
  7. python thread模块_【Python@Thread】thread模块
  8. 新手学vue还是react?
  9. web前端工程师必须掌握的24条宝贵经验!
  10. 数据库字段与属性的关系是什么?