前言
关于Hook的定义官方文档是这么说的:
Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。
简单来说,就是在使用函数式组件时能用上state,还有一些生命周期函数等其他的特性。
如果想了解Hook怎么用,官方文档和阮一峰的React Hooks 入门教程都讲得很清楚了,我建议直接看官方文档和阮大神的文章即可。
本篇博客只讲为什么要用React的Hook新特性,以及它解决了什么问题。
为什么使用Hook?
让我们先看看别人怎么说。
示例代码:
import React, {
Component } from "react";
export default class Button extends Component {
constructor() {
super();
this.state = {
buttonText: "Click me, please" };
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState(() => {
return {
buttonText: "Thanks, been clicked!" };
});
}
render() {
const {
buttonText } = this.state;
return <button onClick={
this.handleClick}>{
buttonText}</button>;
}
}
并且提出:
这个组件类仅仅是一个按钮,但可以看到,它的代码已经很"重"了。 真实的 React App 由多个类按照层级,一层层构成,复杂度成倍增长。
再加入 Redux,就变得更复杂。
实际上,上面这个代码的“重”有部分来源于写法问题,他可能并没有“重”,让我们看看下面这种class写法:
import React, {
Component } from "react";
export default class Button extends Component {
state = {
buttonText: "Click me, please"
}
handleClick = () => {
this.setState(() => {
return {
buttonText: "Thanks, been clicked!" };
});
}
render() {
const {
buttonText } = this.state;
return <button onClick