什么是React

React相关
fetch VS ajax VS axios

传统 Ajax 指的是 XMLHttpRequest(XHR), 最早出现的发送后端请求技术,隶属于原始js中,核心使用XMLHttpRequest对象,多个请求之间如果有先后关系的话,就会出现回调地狱。JQuery ajax 是对原生XHR的封装

axios 是一个基于Promise ,本质上也是对原生XHR的封装,只不过它是Promise的实现版本,符合最新的ES规范,

fetch不是ajax的进一步封装,而是原生js,没有使用XMLHttpRequest对象。

React事件处理---修改this指向

方式1:通过bind方法进行原地绑定,从而改变this指向

方式2:通过创建箭头函数

方式3:在constructor中提前对事件进行绑定

方式4:将事件调用的写法改为箭头函数的形式

请简述你对react的理解

React起源于facebook,react是一个用于构建用户界面的js库

特点:

声明式设计:react采用范式声明,开发者只需要声明显示内容,react就会自动完成

高效: react通过对dom的模拟(也就是虚拟dom),最大限度的减少与dom的交互

灵活: react可以和已知的库或者框架很好配合

组件: 通过react构建组件,让代码更容易复用,能够很好应用在大型项目开发中,把页面功能拆分成小模块  每个小模块就是组件

单向数据流:  react是单向数据流,数据通过props从父节点传递到子节点,如果父级的某个props改变了,react会重新渲染所有的子节点

react组件之间的数据传递

正向传值用props

逆向传值用函数传值 通过事件调用函数传递

同级传值用pubsub-js

用pubsub.publish(事件名,数据)抛出数据

用pubsub.subscribe(监听的事件,()=){})接收数据

跨组件传递  用context  要使用context进行跨组件传值就需要使用createContext()方法,这个方法有两个对象  provider  生产者   Consumer 消费者

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对象中管理
请简述虚拟dom与diff算法

虚拟DOM也就是常说的虚拟节点,它是通过js的object对象模拟DOM中的节点,然后再通过特定的渲染方法将其渲染成真实的DOM节点。

频繁的操作DOM,或大量造成页面的重绘和回流

Diff算法:把树形结构按照层级分解,只比较同级元素,给列表结构的每个单元添加唯一的key值,方便比较

你对组件的理解

可组合,可复用,可维护,可测试

调用 setState 之后发生了什么?

React在调用setstate后,react会将传入的参数对象和组件当前的状态合并,触发调和过程,

在调和过程中,react会根据新的状态构建react元素树重新渲染整个UI界面,在得到元素树之后,react会自动计算新老节点的差异,根据差异对界面进行最小化重新渲染

react 生命周期函数
componentWillMount  组件渲染之前调用

componentDidMount  在第一次渲染之后调用

componentWillReceiveProps  在组件接收到一个新的props时调用

shouldComponentUpdate  判断组件是否更新html

componentWillupdate  组件即将更新html时调用

componentDidupdate  在组件完成更新后立即调用

componentWillUnmount  在组件移除之前调用

******为什么虚拟 dom 会提高性能?(必考)
虚拟 dom 相当于在 js 和真实 dom 中间加了一个缓存,利用 dom diff 算法避免了没有必要的 dom 操作,从而提高性能

(组件的)状态(state)和属性(props)之间有何不同
State与props区别

Props是一个从外部传进组件的参数,主要作用就是父组件向子组件传递数据,但是props对于使用它的组件来说是只读的,一旦赋值不能修改,只能通过外部组件主动传入新的props来重新渲染子组件

State 一个组件的显示形态可以由数据状态和外部参数决定,外部参数是props,数据状态就是state,首先,在组件初始化的时候,用this.state给组件设定一个初始的state,在第一次渲染的时候就会用这个数据来渲染组件,state不同于props一点时,state可以修改,通过this.setState()方法来修改state

shouldComponentUpdate 是做什么的
这个react生命周期钩子函数是来解决这个问题:

在更新数据的时候用setState修改整个数据,数据变了之后,遍历的时候所有内容都要被重新渲染,数据量少还好,数据量大就会严重影响性能

解决办法:

1.shouldcomponentupdate 在渲染前进行判断组件是否更新,更新了再渲染

2.purecomponent(纯组件)省去了虚拟dom生成和对比的过程  在类组件中使用

3.react.memo() 类似于纯组件 在无状态组件中使用

react diff 原理
它是基于三个策略:

tree diff  web UI中dom节点跨层级的移动操作特别少,可以忽略不计
component diff 拥有相同类的两个组件将会生成相似的树形结构,拥有不同类的两个组件会生成不同的树形结构
element diff 对于同一层级的一组子节点,他们可以通过唯一的id进行区分
何为受控组件
React负责渲染表单的组件,值是来自于state控制的,输入表单元素称为受控组件

调用 super(props) 的目的是什么
Super()调用父类的构造方法,有super,组件才有自己的this,在组件全局中都可以使用this,如果只是constructor而不执行super,之后的this都是错的,super继承父组件的this

React 中构建组件的方式
自定义组件:函数组件或者无状态组件  组件首字母大写

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值