一、react生命周期
react生命周期分为初始化阶段、运行阶段、销毁阶段。
(1) 初始化阶段:
componentWillMount:实例挂载以前
Render:渲染组件
componentDidMount:实例挂载完成。通常在这个函数中与后台进行初始化数据交互。
(2)运行阶段:
componentWillReceiveProps:父组件改变时调用。注意只要父组件此方法触发,那么子组件也会触发,也就是说父组件更新,子组件也会跟着更新。
state 发生改变时更新
sholudComponentUpdate:
主要是用来手动阻止组件渲染,通常在这个函数中作组件的性能优化。
方法在接收了新的props或state后触发,你能够经过返回true或false来控制后面的生命周期流程是否触发。
方法在setState后state发生改变后触发,你能够经过返回true或false来控制后面的生命周期流程是否触发。
componentWillUpdate:组件数据更新前调用 在state改变或shouldComponentUpdate返回true后触发。不可在其中使用setState。
render
componentDidUpdate:组件数据更新完成时调用
(3)销毁阶段:
componentUnmount:销毁阶段。通常用来销毁不用的变量或者是解除无用定时器以及解绑无用事件。防止内存泄漏问题。
二、运行阶段生命周期调用顺序
componentWillReceiveProps–>shouldComponentUpdate --> componentWillupdate --> componentDidUpdate
使用redux时候状况
在使用redux作状态管理时候,基本不须要透过生命周期去作setState这样的状态管理了,基本都是用props来传递来从新渲染,须要注意的仅仅是在哪一个生命周期时候触发action,好比须要进行ajax请求时候通常都是在componentDidMount和componentWillReceiveProps时候进行,在reducer中处理完,而后在经过props传入组件执行组件的更新周期。
三、react中key的做用
key是React中用于追踪哪些列表中元素被修改、删除或者被添加的辅助标识。在diff算法中,key用来判断该元素节点是被移动过来的仍是新建立的元素,减小没必要要的元素重复渲染。
四、setState第二个参数的做用
由于setState是一个异步的过程,因此说执行完setState以后不能马上更改state里面的值。若是须要对state数据更改监听,setState提供第二个参数,就是用来监听state里面数据的更改,当数据更改完成,调用回调函数。
五、sass和less的区别
定义变量的符号不一样,less是用@,sass使用$
变量的做用域不一样,less在全局定义,就做用在全局,在代码块中定义,就做用于整哥代码块。而sass只做用域全局。
编译环境不一样,less在开发者环境编译,sass在服务器环境下编译。
六、vue和react的区别
一、react严格上针对的是mvc模式的view层,vue则是mvvm模式。
二、操做dom的方式不一样,vue使用的是指令操做dom,react是经过js进行操做。
三、数据绑定不一样,vue实现的是双向绑定,react的数据流动是单向的。
四、react中state是不能直接改变的,须要使用setState改变。vue中的state不是必须的,数据主要是由data属性在vue对象中管理的。
七、react中的高阶函数
高阶函数就是一个纯js且没有反作用的函数。
高阶组件就是一个函数,且该函数接受一个组件做为参数,并返回一个新的组件。
八、react生命周期中,最适合与服务端进行数据交互的是哪一个函数
componentDidMount:在这个阶段,实例和dom已经挂载完成,能够进行相关的dom操做。
九、react中组件传值
父传子(组件嵌套浅):父组件定义一个属性,子组件经过this.props接收。
子传父:父组件定义一个属性,并将一个回调函数赋值给定义的属性,而后子组件进行调用传过来的函数,并将参数传进去,在父组件的回调函数中便可得到子组件传过来的值。
十、react性能优化阶段函数是哪个?
shouldComponentUpdate
十一、react性能优化的方案
(1)重写shouldComponentUpdate来避免没必要要的dom操做。
(2)使用 production 版本的react.js。
(3)使用key来帮助React识别列表中全部子组件的最小变化。
十二、介绍一下webpack
webpack是一个前端模块化打包工具,主要由入口,出口,loader,plugins四个部分。前端的打包工具还有一个gulp,不过gulp侧重于前端开发的过程,而webpack侧重于模块,例如他会将css文件看做一个模块,经过css-loader将css打包成符合css的静态资源。
1三、Es6中箭头函数与普通函数的区别?
1.普通function的声明在变量提高中是最高的,箭头函数没有函数提高
2.箭头函数没有this,arguments
3.箭头函数不能做为构造函数,不能被new,没有property,
4.call和apply方法只有参数,没有做用域
1四、什么是闭包?闭包有什么危害?如何解决闭包带来的危害?
简单来讲,闭包就是一个定义在函数内部的函数。由于js中存在做用域的问题,因此在函数内部定义的变量在函数外部是没有办法直接获取到。而闭包就是沟通函数内部和外部的桥梁,这样在函数外部接能够获得函数内部的值。而且闭包能够实现函数属性和方法的私有化。
闭包的危害:
由于闭包会将内部变量储存在内存中,若是长时间不清除的话会形成内存泄漏的问题,影响程序的性能。
解决方法:对于不使用的变量及时的清除。