React框架的特点有哪些?
虚拟dom
组件化开发
jsx声明式代码
单向数据流
React中虚拟dom的作用是什么?
每次数据模型变化的时候,虚拟DOM树都会重新构建
React依赖某个算法(称之为diff算法)来与之前的虚拟DOM树进行比较,只有在新旧dom树不同的情况下才重新进行计算
所有的变化都要经过批处理,完成之后,真实的DOM树才进行更新,这样就提升了DOM更新的效率
React的fiber算法用来解决什么问题?工作原理是什么?
JavaScript引擎和页面渲染引擎两个线程是互斥的,当其中一个线程执行时,另一个线程只能挂起等待,如果JavaScript线程长时间占用了主线程,那么渲染层面的更新就不得不长时间等待,界面长时间不更新,会导致页面响应度变差,用户可能会感觉到卡顿
工作原理:React Fiber的原理其实很简单---分片,把一个耗时长的任务分成很多小片,每一个小片的运行时间很短,虽然总时间依然很长,但是在每个小片执行完之后,都给其他的任务一个执行的机会,这样唯一的线程就不会被独占,其他任务依然有运行的机会
React创建组件的方式有哪些?
1.函数式定义的无状态组件
2.es6形式的class组件
3.es5原生方式React.creatClass定义的组件
描述一下React中的jsx语法?
React定义的一种类似XML的JavaScript语法扩展,他的典型特征是标签和js混着写
它的优点有:
JSX执行更快,因为它在编译为JavaScript代码后进行了优化
它是类型安全的,在编译过程中就能发现错误
使用JSX编写模板更加简单快速
描述一下React中组件通信的方式?
1.父组件向子组件通信,父组件在子组件身上通过自定义属性向子组件传值,子组件通过props接收值
2.子组件向父组件通信,父组件在子组件身上通过自定义属性将一个函数传递给子组件,子组件回调该函数并传值
3.非起嵌套组件间通信,实例化一个events对象,其中一个组件监听事件,另一个组件触发事件并传值
4.跨级组件之间通信,借助Context,外层组件用Provider传值给内层组件,内层组件用context接收值
React组件生命周期函数有哪些?分别有什么作用?
constructor
getDefaultProps
getInitialState
componentWillMount
componentDidMount,在这里发起网络请求,创建定时器,添加事件监听
componentWillReceiveProps
shouldComponentUpdate,用于组件性能优化
componentWillUpdate
render,组件更新的核心方法
componentWillUpdate
componentWillUnMount,在这里取消网络请求,销毁定时器,移除事件监听
React父组件中如何调用子组件的函数?
方式1:通过ref获取到子组件实例,通过子组件实例调用子组件的方法
方式2:通过属性传递函数到子组件,子组件回调该函数将子组件的实例以参数的形式传给父组件并保存在父组件中,父组件拿到子组件的实例调用子组件的方法
什么是高阶函数?它有哪些应用?
高阶函数:本质是一个函数,它的参数是函数 或返回值是一个函数
应用:函数柯里化,函数节流,函数防抖,分时函数,AOP(面向切面编程)
你怎么理解React中的高阶组件?
高阶组件:本质是一个函数,它的参数是组件,返回值是一个组件
高阶组件最大的特点就是重用组件逻辑。它并不是由React API定义出来的功能,而是由React的组合特性衍生出来的一种设计模式,例如:react-router-dom中的withRouter,react-redux中的connect就是高阶组件