当前位置: 代码迷 >> 综合 >> 前端常见面试题总结
  详细解决方案

前端常见面试题总结

热度:57   发布时间:2024-02-10 11:15:48.0

1.为什么使用redux ,rudux的工作流程?

react通信是一个单向数据流,非父子组件间是不能通信的。如果不使用redux,随着项目的越来越大,组件之间通信越来越复杂,组件的状态越来越多,项目将越来越难以维护。使用redux之后,就可以解决react的组建通信问题以及状态变量的保存问题,项目的状态都保存到store之中,各个组件可以直接从store之中获取到自己需要的状态,如果需要改变store中的状态,redux也提供了dispatch方法,组件可以dispatch一个action,根据action的type属性,reducer会对状态做出变化。

2.Vuex和redux的区别 ?

首先vue使用的是可变数据,redux使用的是不可变数据,
Vue通过mutation函数直接改变数据,redux是通过reducer生成一个新的数据去替换之前的数据,
Redux 在检测数据变化的时候,是通过 diff 的方式比较差异的,而Vuex其实和Vue的原理一样,是通过 getter/setter来比较的

3.react diff的原理?

把树形结构按照层级分解,只比较同级元素。

Tree diff:采用分层求异的策略,将新旧两棵DOM树按照层级关系进行比较,这样只需要遍历一遍,就能搞找到那些元素需要更新。

Component diff:查看组件类型是否相同。如果类型不同,则需要更新,更新时先把旧组件删除,再创建一个新的组件插入之前删除的位置。

Element diff:通过唯一key,对元素diff进行优化。元素发生了改变,则找到需要修改的元素,有针对性进行修改。


4.为什么有时连续多次setState只有一次生效?

原因就是 React会批处理机制中存储的多个 setState进行合并
React会对多次连续的 setState进行合并,如果你想立即使用上次 setState后的结果进行下一次 setState,可以让 setState 接收一个函数而不是一个对象。这个函数用上一个 state 作为第一个参数,将此次更新被应用时的 props 做为第二个参数。


5.webpack 和 gulp 的区别?

webpack是一个模块打包器,强调的是一个前端模块化方案,更侧重模块打包,我们可以把开发中的所有资源都看成是模块,通过loader和plugin对资源进行处理。

gulp是一个前端自动化构建工具,强调的是前端开发的工作流程,可以通过配置一系列的task,第一task处理的事情(如代码压缩,合并,编译以及浏览器实时更新等)。然后定义这些执行顺序,来让glup执行这些task,从而构建项目的整个开发流程。自动化构建工具并不能把所有的模块打包到一起,也不能构建不同模块之间的依赖关系。


6.webpack中loader和plugins的区别?

虽然俩者都可以对webpack进行一定的拓展,但是loader更像是一个转换器,直接操作文件进行转换
loader:
loader是文件加载器,能够加载资源文件,直接对文件进行操作,最后进行打包,
处理一个文件可以使用多个loader,loader的执行顺序是和本身的顺序是相反的,即最后一个loader最先执行,第一个loader最后执行。
第一个执行的loader接收源文件内容作为参数,其他loader接收前一个执行的loader的返回值作为参数。最后执行的loader会返回此模块的JavaScript源码

plugin:
1.plugin实际是一个类(构造函数),通过在plugins配置中实例化进行调用。
2. 它在原型对象上指定了一个apply方法,入参是compiler对象
3. 指定一个事件钩子,并调用内部提供的API
4. 完成操作后,调用webpack 提供的callback方法
就会通过compiler.plugin(事件名称,回调函数)监听到webpack广播出来的事件
·并且可以通过compiler对象去操作webpack
plugin是一个扩展器,它丰富了wepack本身,针对是loader结束后,webpack打包的整个过程,它并不直接操作文件,而是基于事件机制工作,可以控制 webpack 打包流程的每个环节,监听webpack打包过程中的某些节点,

  相关解决方案