1.高阶组件你是怎么理解的,它本质是一个什么东西?高阶组件和继承,哪一种更好?个人认为,包括官方也认为,在react中不要用继承,设计模式里面就有一种明确的说法是组合优于继承。react这种组件式的编程方式,实际上是把一些组件合在一起,是一种组合式的设计模式,一定是优于继承的。所以它的可维护性要比继承好的多。
高阶组件实际上就是一个函数,它接受一些参数,返回一个函数。高阶组件是对组件进行包装,返回一个新的组件。一个组件,大部分情况下可以直接使用,只有少数情况下有一点区别,我们可以把区别写在高阶组件里面。
当一个组件嵌套多层高阶组件,就会出现高阶组件地狱的情况。可以通过hook解决。
2.函数组件怎么做性能优化?函数式组件比普通组件性能高,因为它是一个函数,没有生命周期,相对于类来说,没有构造类的过程,所以它性能高。但是因为它没有 shoudComoponentUpdate 这个生命周期,所以每当props改变时,函数就会重新执行。性能优化:可以通过 React.memo() 对函数式组件进行包装,然后再返回,包装后的函数式组件就带有了shouldComponentUpdate的特性。
3.哪个生命周期里发送ajax?在 componentDidMount 里(1) componentWillMount 在新版本react中已经被废弃了(2) SSR项目时,componentWillMount要做服务器端数据的获取,所以不能被占用注:SSR 服务器端渲染,可以使网站SEO效果更加的完善(搜索引擎优化)
4.SSR的原理是什么?这个要从虚拟dom说起,虚拟dom的一个好处是可以让我们的代码运行速度更快,另一个好处是,虚拟dom让我们的react代码,最终变成了JS对象。也就可以让我们的react代码可以在客户端(浏览器)上执行,还可以在服务器上执行。服务器上是没有dom这个概念的,通过nodejs 也可以运行的react代码。SSR核心的原理是通过 借助虚拟dom来实现的。
5.组件是什么?类是什么?类被编译成什么?组件指的是页面的一部分,本质是一个类,最本质上是一个构造函数类是构造函数类被编译成构造函数模块是webpack引入的那一个个文件
6.如何避免ajax数据重新获取通过 react-redux 统一管理数据
7.reselect 是做什么使用的?对应 vue 的 computed (计算属性),做了缓存提升代码的性能
8.react-router的基本原理,hashHistory,browserHistorybrowserHistory 依赖于后端服务器的配置
9.什么情况下使用异步组件路由懒加载,解决spa应用在网速慢的情况下,页面加载慢的问题reloadable库// 新版本import('https://www.cnblogs.com/crazycode2/p/home/header').then