React
8.调用setState之后发生了什么?
React在调用setstate后,react会将传入的参数对象和组件当前的状态合并,触发调和过程,在调和过程中,react会根据新的状态构建react元素树重新渲染整个UI界面,在得到元素树之后,react会自动计算新老节点的差异,根据差异对界面进行最小化重新渲染
9.react生命周期函数
componentWillMount组件渲染之前调用
componentDidMount在第一次渲染之后调用
componentWillReceiveProps在组件接收到一个新的props时调用
shouldComponentUpdate判断组件是否更新html
componentWillupdate组件即将更新html时调用
componentDidupdate在组件完成更新后立即调用
componentWillUnmount在组件移除之前调用
10.为什么虚拟dom会提高性能?(必考)
虚拟dom相当于在js和真实dom中间加了一个缓存,利用dom
diff算法避免了没有必要的dom操作,从而提高性能
11.(组件的)状态(state)和属性(props)之间有何不同
State与props区别
Props是一个从外部传进组件的参数,主要作用就是父组件向子组件传递数据,但是props对于使用它的组件来说是只读的,一旦赋值不能修改,只能通过外部组件主动传入新的props来重新渲染子组件
State一个组件的显示形态可以由数据状态和外部参数决定,外部参数是
props,数据状态就是state,首先,在组件初始化的时候,用this.state
给组件设定一个初始的state,在第一次渲染的时候就会用这个数据来渲
染组件,state不同于props一点时,state可以修改,通过this.setState()方法来修改state
12.shouldComponentUpdate是做什么的
这个react生命周期钩子函数是来解决这个问题:
在更新数据的时候用setState修改整个数据,数据变了之后,遍历的时候所有内容都要被重新渲染,数据量少还好,数据量大就会严重影响性能
解决办法:
1.shouldcomponentupdate在渲染前进行判断组件是否更新,更新了再渲染
2.purecomponent(纯组件)省去了虚拟dom生成和对比的过程在类组件中使用
3.react.memo()类似于纯组件在无状态组件中使用
13.reactdiff原理
它是基于三个策略:
treediffwebUI中dom节点跨层级的移动操作特别少,可以忽略不计
componentdiff拥有相同类的两个组件将会生成相似的树形结构,拥有
不同类的两个组件会生成不同的树形结构elementdiff对于同一层级的一组子节点,他们可以通过唯一的id进行
区分
14.何为受控组件
React负责渲染表单的组件,值是来自于state控制的,输入表单元素称为受控组件
15.调用super(props)的目的是什么
Super()调用父类的构造方法,有super,组件才有自己的this,在组件全局中都可以使用this,如果只是constructor而不执行super,之后的this都是错的,super继承父组件的this
16.React中构建组件的方式
自定义组件:函数组件或者无状态组件组件首字母大写
类组件:一个类组件必须实现一个render方法,这个方法必须返回一个jsx元素,要用一个外层的元素把所有内容包裹起来
17.简述flux思想
Flux的最大特点,就是数据的"单向流动"。
1.用户访问View
2.View发出用户的Action
3.Dispatcher收到Action,要求Store进行相应的更新
4.Store更新后,发出一个"change"事件
18.React项目用过什么脚手架?Mern?Yeoman?
Mern:MERN是脚手架的工具,它可以很容易地使用Mongo,Express,ReactandNodeJS生成同构JS应用。它最大限度地减少安装时间,并得到您使用的成熟技术来加速开发。
19.应该在React组件的何处发起Ajax请求?
在React组件中,应该在componentDidMount中发起网络请求。这个方法会在组件第一次“挂载”(被添加到DOM)时执行,在组件的生命周期中仅会执行一次。更重要的是,你不能保证在组件挂载之前Ajax请求已经完成,如果是这样,也就意味着你将尝试在一个未挂载的组件上调用setState,这将不起作用。在componentDidMount中发起网络请求将保证这有一个组件可以更新了。
20.何为高阶组件(higherordercomponent)?
高阶组件是一个以组件为参数并返回一个新组件的函数。HOC运行你重用代码、逻辑和引导抽象。最常见的可能是Redux的connect函数。除了简单分享工具库和简单的组合,HOC最好的方式是共享React组件之间的行为。如果你发现你在不同的地方写了大量代码来做同一件事时,就应该考虑将代码重构为可重用的HOC。