React篇

75 阅读4分钟

1. 请简述你对 react 的理解

React 起源于 facebook,react 是一个用于构建用户界面的 js 库
  • 特点: 声明式设计:react 采用范式声明,开发者只需要声明显示内容,react 就会自动完成
  • 高效: react 通过对 dom 的模拟(也就是虚拟 dom),最大限度的减少 与 dom 的交互
  • 灵活: react 可以和已知的库或者框架很好配合
  • 组件: 通过 react 构建组件,让代码更容易复用,能够很好应用在大型 项目开发中,把页面功能拆分成小模块,每个小模块就是组件
  • 单向数据流: react 是单向数据流,数据通过 props 从父节点传递到子 节点,如果父级的某个 props 改变了,react 会重新渲染所有的子节点

2. react 组件之间的数据传递

  • 正向传值:用props
  • 逆向传值:用函数传递,通过事件调用函数传递
  • 同级传递:用pubsub-js 用pubsub.pubilsh()
  • 抛出数据:用 pubsub.subscribe(监听的事件,()=){})接收数据
  • 跨组件传递:用 context 要使用 context 进行跨组件传值就需要使用 createContext() 方 法 , 这 个 方 法 有 两 个 对 象 provider 生 产 Consumer 消费者

3. Vue 与 react 区别

相同点:

  • 都支持服务器渲染
  • 都有虚拟dom,组件化开发,通过props参数进行父子组件数据的传递
  • 都实现webcomponent规范
  • 都是数据驱动试图
  • 都有状态管理,react有redux,vue有vuex
  • 都有支持native的方案react 有 react native vue 有 weex

不同点

  • react 严格上只针对 mvc 的 view 层,vue 是 mvvm 模式 虚拟
  • 虚拟 dom 不一样,vue 会跟踪每一个组件的依赖关系,不需要重新渲染 整个dom 组件树,而 react 不同,当应用的状态被改变时,全部组件都 会重新渲染,所以 react 中用 shouldcomponentupdate 这个生命周期 的钩子函数来控制
  • 组件写法不一样 ,react 是 jsx 和 inline style ,就是把 html 和 css 全 写进 js 中,vue 则是 html,css ,js 在同一个文件
  • 数据绑定不一样,vue 实现了数据双向绑定,react 数据流动是单向的 在 react 中,state 对象需要用 setstate 方法更新状态,在 vue 中,state 对象不是必须的,数据由 data 属性在 vue 对象中管理

4. react 生命周期函数

  • componentWillMount 组件渲染之前调用
  • componentDidMount 在第一次渲染之后调用
  • componentWillReceiveProps 在组件接收到一个新的 props 时调用
  • shouldComponentUpdate 判断组件是否更新 html
  • componentWillupdate 组件即将更新 html 时调用
  • componentDidupdate 在组件完成更新后立即调用
  • componentWillUnmount 在组件移除之前调用

5. 调用setState函数之后会发生什么?

  • 代码中调用setState函数之后,React会将传入的参数对象与组件当前的 状态合并,然后触发所谓的调和过程(Reconciliation)。
  • 经过调和过程,React会以相对高效的方式根据新的状态构建React元素树 并且着手重新渲染整个UI界面;
  • 在React得到元素树之后,React会自动计算出新的树与老树的节点差异, 然后根据差异对界面进行最小化重渲染;
  • 在差异计算算法中,React能够相对精确地知道哪些位置发生了改变以及应 该如何改变,这就保证了按需更新,而不是全部重新渲染。

6. React中组件如何进行传值

  • 父级传递子级:把数据挂载子组件的属性上,子组件通过this.props来接接收父组件的数据
  • 子级传递父级:父级需要定义一个修改数据的方法,把修改的数据的方法传给子组件,当子组件需要修改父级数据时,调用父级传过来的修改方法
  • 兄弟组件传递:属于同一父级,父组件分别和这两组件传递,比如子组件A操作执行父组件方法,父组件进行修改,然后把信息传递给子组件B
  • Context跨组件传递数据:顶级组件向最里面组件进行传值

7. 介绍redux

redux是一个应用数据流框架,主要还是解决了组件间状态共享的问题,原理是集中式管理主要有

  • 三个核心方法:
    • action
    • stroe
    • reducer
  • 三大原则:
    • 唯一数据源(整个应用的state被存储在一颗objecttree中,并且这个objecttree只存在于唯一一个store中)
    • reducer必须是纯函数
    • state是只读的,想到改变必须经过派发action

8. Redux工作流程

使用通过reducer创建出来的store发起一个action,reducer会执行相应的更新state的方法,当state更新之后,view会根据state做出相应的变化

  • 提供getState()获取到state
  • 通过dispatch(action)发起action更新state
  • 通过subscribe()注册监听

今日份美好祝愿:一些小美好正在井然有序地发生着~。

p266450076.webp