> 大家好,我是阿慧,目前正在找工作,太难了,脑子根本记不住啊,整理一些面试官常问的问题,知识点和细节,加深记忆,我会持续更新,每天进步一点点,欢迎大家指出问题,虚心学习,感谢大家的建议
类组件 Class Component
类组件是基于JavaScript中es6的Class语法。先看代码,看图说话。
import React from "react";
class People extends React.Component {
constructor(props) {
super(props);
this.state = {
name: "阿慧",
};
}
// 生命周期方法: 组件挂载后执行
componentDidMount() {}
// 生命周期方法: 组件更新后执行
componentDidUpdate() {}
// 生命周期方法: 组件挂载前执行
componentWillUnmount() {}
// 事件处理
handleChangeName = () => {
this.setState({ name: "刘亦菲" });
};
render() {
return (
<div>
<div>我梦见我重生变成了</div>
<div>{this.state.name}</div>
<button onClick={this.handleChangeName}>许愿池</button>
</div>
);
}
}
export default People;
所以类组件的核心机制是什么
- this关键字 this.
- 生命周期方法(componentDidMount componentDidUpdate等)
- 状态管理 this.state={}, this.setState()
- 组件实例 类组件组件是面向对象编程,是 OOP 思想。
函数式组件
import React, { useEffect, useState } from "react";
function Home(props) {
const [name, setName] = useState("?");
useEffect(() => {
// axios
}, []);
function ChangeName() {
setName("赵丽颖");
}
return (
<div>
<div> 函数式 我的爱豆是{name}</div> <button onClick={ChangeName}>Change</button>
</div>
);
}
export default Home;
函数组件本质上就是一个函数,没有this关键字,没有实例。使用Hooks去保存状态数据,useEffect可以模拟当作是类组件的生命周期方法。
面试中如果要回答面试官的这个问题,描述区别:可以从语法,状态管理,副作用,生命周期,this指向问题等方面描述。
关于两者的性能优化方式的不同,类组件可以通过shouldComponentUpdate/PureComponent 来避免不必要的渲染, 函数式组件可以用React.memo, useCallBack,useMemo等方法回答。
更多前端知识,持续更新。