当前位置: 首页 > Web前端 > HTML

前端常考的React相关面试题(一)

时间:2023-03-28 00:11:47 HTML

对有状态组件和无状态组件的理解及使用场景(一)有状态组件特点:类组件有继承,可以用this,也可以用反应的生命周期。很多,容易频繁触发生命周期钩子函数,影响内部使用状态的性能,维护自身状态的变化,有状态组件根据外部组件传入的props和自身进行渲染状态。使用场景:需要使用状态。需要使用状态操作组件(无状态组件也可以实现新版reacthooks)总结:类组件可以维护自己的状态变量,即组件的状态。类组件也有不同的生命周期方法,可以让开发者在组件的不同阶段(挂载、更新、卸载)对组件有更多的控制。类组件既可以充当无状态组件,也可以充当有状态组件。当类组件不需要管理自己的状态时,也可以称为无状态组件。(2)无状态组件特点:不依赖于自身的状态可以是类组件,也可以是函数组件。this关键字可以完全避免。(由于使用了没有绑定的箭头函数事件)具有更高的性能。当不需要使用生命周期钩子时,首先应该使用无状态函数组件,组件内部不维护状态,只根据外部组件传入的props渲染组件。当道具改变时,组件重新渲染。使用场景:组件无需管理状态,纯展示优点:简化代码,专注渲染组件无需实例化,无生命周期,提升性能。输出(渲染)只依赖于输入(属性),无副作用View与数据解耦分离缺点:不能使用没有生命周期方法的ref不能控制组件的重新渲染,因为不能使用shouldComponentUpdate方法,当组件接收到新的属性时有时会重新渲染总结:有内部状态而与外部无关的组件可以考虑使用状态组件,这样状态树就不会太复杂,便于理解和管理.当一个组件不需要管理自己的状态,即无状态组件时,应该先设计成功能组件。比如自定义

);}}如果属性值是一个字符串,React会将结果显示在组件实例对象的refs属性中,存储一个同名的属性,它是对这个DOM元素的引用。它可以通过本机DOMAPI进行操作。导出类App扩展组件{showResult(){console.log(this.refs.username.value);}render(){return(
显示结果
);}}setState方法的第二个参数有什么用?使用它的目的是什么?它是一个回调函数,在setState方法完成并重新呈现组件时调用。在工作中,更好的方法是使用React组件生命周期之一——“存在”生命周期方法,而不是依赖这个回调函数。导出类App扩展组件{constructor(props){super(props);this.state={username:"雨夜清河",};}render(){return
{this.state.username}
;}componentDidMount(){this.setstate({username:"友家前端网络",},()=>console.log("重新渲染成功。"));}}createElement和cloneElement有什么区别?createElement是从JSX复制而来,在React中用于创建React元素(虚拟DOM)的内容。cloneElement用于克隆元素并传递新的道具。为什么React事件必须在React源代码中绑定this本身。当即将调用特定的事件处理程序时,将调用invokeGuardedCallback方法。functioninvokeGuardedCallback(name,func,a){try{func(a);}catch(x){if(caughtError===null){caughtError=x;}}}事件处理器是直接调用的,并没有指定被调用的组件,所以没有手动绑定直接获取到的this是不准确的,所以我们需要手动将当前组件绑定到this上。React的工作原理React会创建一个虚拟DOM(virtualDOM)。当组件中的状态发生变化时,React会首先通过“diffing”算法在虚拟DOM中标记变化,第二步是协调,将diff的结果更新到DOM。类组件和功能组件有什么区别?类组件不仅可以让你使用更多的附加特性,比如组件自身的状态和生命周期钩子,还可以让组件直接访问store并维护状态将组件本身呈现到页面,并且可以使用纯函数来创建这样的组件。此类组件也称为哑组件或表示组件