之前在论坛上看到过这样一段话,用来描述 react hooks 感觉还挺贴切。

  1. 你还在为该使用无状态组件(Function)还是有状态组件(Class)而烦恼吗?
  2. ——拥有了hooks,你再也不需要写Class了,你的所有组件都将是Function
  3. 你还在为搞不清使用哪个生命周期钩子函数而日夜难眠吗?
  4. ——拥有了Hooks,生命周期钩子函数可以先丢一边了。
  5. 你在还在为组件中的this指向而晕头转向吗?
  6. ——既然Class都丢掉了,哪里还有this?你的人生第一次不再需要面对this

生命周期1.jpg生命周期16.8.webp

这两张React生命周期图,想必大部分初学React的小伙伴,都有见到过。大量的生命周期函数及作用,把我们搞的晕头转向,肯定有因为复杂的生命周期函数放弃React的伙伴。

但自从有了 React Hooks 新特性,用React开发项目是一件让人开心愉快的事。

说了半天,用无状态组件(Function)和状态组件(Class)怎么开发页面呢?

那我们一起写个简单的例子吧—-“计数器”。
image.png

1、状态组件(Class)


import React from 'react';
import { Card, Button } from 'antd';

class Counter extends React.Component {

    state = {
        count: 0,
    }

    render() {
        const { count } = this.state;
        return (
            <Card>
                <p>您点击 {count} 次</p>
                <Button onClick={() => this.setState({ count: count + 1 })}>
                    Click me
                </Button>
            </Card>
        );
    }
}

export default Counter;

2、无状态组件(Function)

import React, { useState } from 'react';
import { Card, Button } from 'antd';

const Counter = () => {
    const [count, setCount] = useState(0);
    return (
        <Card>
            <p>您点击 {count} 次</p>
            <Button onClick={() => setCount(count + 1)}>
                Click me
            </Button>
        </Card>
    );
}
export default Counter;

同样实现“计数器”,后者明显更简洁。如果涉及异步请求、状态共享等等,React Hooks 无疑是最好的选择。
Function 本应该是无状态组件的,但是由于引入了useState,这个函数有了自己的状态(count),同时它也可以更新自己的状态(setState),就是这个hook—useState让普通的函数变成了有状态的函数。

当然了,除了有useState,它还有其他hook,比如:useEffect、useCallback、useRef、useMemo等等,
后续我们也会形象化的讲到,快速掌握它们的用法及应用场景。