React Hooks深入了解

1.什么是 React Hooks

官方介绍:Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。

2.React Hooks的优点是什么

  • 拥有了hooks,你再也不需要写Class了,你的所有组件都将是Function。
  • 拥有了Hooks,生命周期钩子函数可以先丢一边了。
  • 既然Class都丢掉了,哪里还有this?你的人生第一次不再需要面对this。

3.一个最简单的Hooks

以下是一个原本应该使用class的简单应用,利用Hooks改造的结果。
我们再来看一下使用hooks后的版本:

import { useState } from 'react';

function Example() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

可以看到, Example变成了一个函数,但这个函数却有自己的状态(count),同时它还可以更新自己的状态(setCount)。这个函数之所以这么了不得,就是因为它注入了一个hook–useState,就是这个hook让我们的函数变成了一个有状态的函数

除了useState这个hook外,还有很多别的hook,比如useEffect提供了类似于componentDidMount等生命周期钩子的功能,useContext提供了上下文context的功能等等。

Hooks本质上就是一类特殊的函数,它们可以为你的函数型组件(function component)注入一些特殊的功能。

4.React为什么要搞一个Hooks?

1.想要复用一个有状态的组件太麻烦了!

引例:如果我们想要复用一个组件,面对成篇的 class 其中 的this 的指向 是一个十分让人头疼的 问题。
官方提供的解决方法是
渲染属性(Render Props)
高阶组件(Higher-Order Components)

渲染属性---指的是使用一个值为函数的prop来传递需要动态渲染的nodes或组件。(利用属性或者插槽的方式都可以)
高阶组件---这个概念就更好理解了,说白了就是一个函数接受一个组件作为参数,经过一系列加工后,最后返回一个新的组件。

----以上这两种模式看上去都挺不错的,很多库也运用了这种模式,比如我们常用的React Router。

----但我们仔细看这两种模式,会发现它们会增加我们代码的层级关系。最直观的体现,打开devtool看看你的组件层级嵌套是不是很夸张吧。

----这时候再回过头看我们上一节给出的hooks例子,是不是简洁多了,没有多余的层级嵌套。把各种想要的功能写成一个一个可复用的自定义hook,当你的组件想用什么功能时,直接在组件里调用这个hook即可。

2.生命周期钩子函数里的逻辑太乱了

我们通常希望一个函数只做一件事情,但我们的生命周期钩子函数里通常同时做了很多事情比如我们需要在componentDidMount中发起ajax请求获取数据,绑定一些事件监听等等。同时,有时候我们还需要在componentDidUpdate做一遍同样的事情。当项目变复杂后,这一块的代码也变得不那么直观。

3.classes真的太让人困惑了

我们用class来创建react组件时,还有一件很麻烦的事情,就是this的指向问题。为了保证this的指向正确,我们要经常写这样的代码:this.handleClick = this.handleClick.bind(this),或者是这样的代码:

你可能感兴趣的:(小技术)