react-小记

117 阅读3分钟

react组件的三大核心属性

组件三大核心属性1: state

  • state是组件对象最重要的属性, 值是对象(可以包含多个key-value的组合)

  • 组件被称为"状态机", 通过更新组件的state来更新对应的页面显示(重新渲染组件)

  • 组件中render方法中的this为组件实例对象

  • 组件自定义的方法中this为undefined(如何解决:强制绑定this: 通过函数对象的bind(),使用箭头函数)

  • 状态数据,不能直接修改或更新,在类式组件中使用this.setState()变更数据

组件三大核心属性2: props

  • 每个组件对象都会有props属性

  • 组件标签的所有属性都保存在props中

  • 作用:通过标签属性从组件外向组件内传递变化的数据

  • 注意: 组件内部不要修改props数据

  • 对props中的属性值进行类型限制和必要性限制 使用prop-types库进限制(需要引入prop-types库)

组件三大核心属性3: refs与事件处理

理解

组件内的标签可以定义ref属性来标识自己

事件处理

1.通过onXxx属性指定事件处理函数(注意大小写)

  • React使用的是自定义(合成)事件, 而不是使用的原生DOM事件
  • React中的事件是通过事件委托方式处理的(委托给组件最外层的元素)

2.在组件中可以通过event.target得到发生事件的DOM元素对象

react生命周期

react生命周期

react相关概念

React的特点

1.声明式编码

2.组件化编码

3.React Native 编写原生应用

4.高效(优秀的Diffing算法)

React高效的原因

1.使用虚拟(virtual)DOM, 不总是直接操作页面真实DOM。

2.DOM Diffing算法, 最小化页面重绘。

JSX(全称: JavaScript XML)

1.react定义的一种类似于XML的JS扩展语法:

  • JS + XML本质是React.createElement方法的语法糖

2.作用: 用来简化创建虚拟DOM

3.注意:它不是字符串, 也不是HTML/XML标签;它最终产生的就是一个JS对象

4.基本语法规则

  • 遇到 <开头的代码, 以标签的语法解析: html同名标签转换为html同名元素, 其它标签需要特别解析
  • 遇到以 { 开头的代码,以JS语法解析: 标签中的js表达式必须用{ }包含

babel.js的作用

1.浏览器不能直接解析JSX代码, 需要babel转译为纯JS的代码才能运行

2.只要用了JSX,都要加上type="text/babel", 声明需要babel来处理

渲染虚拟DOM(元素)

1.语法: ReactDOM.render(virtualDOM, containerDOM)

2.作用: 将虚拟DOM元素渲染到页面中的真实容器DOM中显示

3.参数说明

  • 参数一: 纯js或jsx创建的虚拟dom对象
  • 参数二: 用来包含虚拟DOM元素的真实dom元素对象(一般是一个div)

模块

1.理解:向外提供特定功能的js程序, 一般就是一个js文件

2.为什么要拆成模块:随着业务逻辑增加,代码越来越多且复杂。

3.作用:复用js, 简化js的编写, 提高js运行效率

模块化:当应用的js都以模块来编写的, 这个应用就是一个模块化的应用

组件

1.理解:用来实现局部功能效果的代码和资源的集合

2.为什么要用组件: 一个界面的功能更复杂

3.作用:复用编码, 简化项目编码, 提高运行效率

组件化:当应用是以多组件的方式实现, 这个应用就是一个组件化的应用

受控组件与非受控组件

受控组件与非受控组件

纯函数

理解

  • 一类特别的函数: 只要是同样的输入(实参),必定得到同样的输出(返回)

  • 必须遵守以下一些约束

    1. 不得改写参数数据
    2. 不会产生任何副作用,例如网络请求,输入和输出设备
    3. 不能调用Date.now()或者Math.random()等不纯的方法

redux的reducer函数必须是一个纯函数

高阶函数

理解

一类特别的函数,如果一个函数符合下面2个规范中的任何一个,那该函数就是高阶函数。

  • 情况1: 参数是函数
  • 情况2: 返回是函数

常见的高阶函数

  1. 定时器设置函数
  2. 数组的forEach()/map()/filter()/reduce()/find()/bind()
  3. promise
  4. react-redux中的connect函数

作用

能实现更加动态, 更加可扩展的功能

函数的柯里化

通过函数调用继续返回函数的方式,实现多次接收参数最后统一处理的函数编码形式。

//例:
function sum(a){
        return(b)=>{
                return (c)=>{
                        return a+b+c
                }
        }
}

react组件间通信

react组件间通信