美文网首页
hook useEffect

hook useEffect

作者: 曾经也是个少年 | 来源:发表于2020-12-18 11:11 被阅读0次

useState

  1. 最简单的 useState 用法是这样的:

    function Counter() {
      var [count, setCount] = useState(0);
    
      return (
        <div>
          <div>{count}</div>
          <Button onClick={() => { setCount(count + 1); }}>
            点击
          </Button>
        </div>
      );
    }
    
  2. 基于 useState 的用法,我们尝试着自己实现一个 useState:

    function useState(initialValue) {
      var state = initialValue;
      function setState(newState) {
        state = newState;
        render();
      }
      return [state, setState];
    }
    
  3. 这时我们发现,点击 Button 的时候,count 并不会变化,为什么呢?我们没有存储 state,每次渲染 Counter 组件的时候,state 都是新重置的。

    自然我们就能想到,把 state 提取出来,存在 useState 外面。

```source-js
var _state; // 把 state 存储在外面

function useState(initialValue) {
  _state = _state || initialValue; // 如果没有 _state,说明是第一次执行,把 initialValue 复制给它
  function setState(newState) {
    _state = newState;
    render();
  }
  return [_state, setState];
}
```

到目前为止,我们实现了一个可以工作的 useState,至少现在来看没啥问题。

接下来,让我们看看 useEffect 是怎么实现的。

useEffect

useEffect 是另外一个基础的 Hook,用来处理副作用,最简单的用法是这样的:

 useEffect(() => {
    console.log(count);
 }, [count]);

我们知道 useEffect 有几个特点:

  1. 有两个参数 callback 和 dependencies 数组
  2. 如果 dependencies 不存在,那么 callback 每次 render 都会执行
  3. 如果 dependencies 存在,只有当它发生了变化, callback 才会执行

我们来实现一个 useEffect

let _deps; // _deps 记录 useEffect 上一次的 依赖

function useEffect(callback, depArray) {
  const hasNoDeps = !depArray; // 如果 dependencies 不存在
  const hasChangedDeps = _deps
    ? !depArray.every((el, i) => el === _deps[i]) // 两次的 dependencies 是否完全相等
    : true;
  /* 如果 dependencies 不存在,或者 dependencies 有变化*/
  if (hasNoDeps || hasChangedDeps) {
    callback();
    _deps = depArray;
  }
}

相关文章

  • React Hook:使用 useEffect

    React Hook:使用 useEffect 一、描述 Effect Hook 可以让你能够在 Function...

  • How the useEffect Hook Works (wi

    原文地址:How the useEffect Hook Works (with Examples)[https:/...

  • hook useEffect

    useState 最简单的 useState 用法是这样的:function Counter() { var [...

  • useEffect Hook

    前言 副作用(side effect)是什么? 在计算机科学中,如果一个函数或其他操作修改了其局部环境之外的状态变...

  • useState&useEffect初始化变化被监听

    状态1 Line 20:8: React Hook useEffect has a missing depend...

  • hook请求数据

    useEffect不能在内部直接使用异步函数 添加loading,错误码 变成hook 简单的ajax hook ...

  • useEffect和useLayoutEffect

    useEffect 该 Hook 接收一个包含命令式、且可能有副作用代码的函数 使用 useEffect 完成副作...

  • react 的好文章

    React Hook:使用 useEffect http://www.ptbird.cn/react-hoot-u...

  • hook-useEffect

    简介 1 .useEffect就是class组件中的componentDidMount,componentDidU...

  • React Hook - useEffect

    useEffect 的作用 可以让我们在函数组件中执行副作用 数据获取、事件监听以及修改 DOM 都属于副作用操作...

网友评论

      本文标题:hook useEffect

      本文链接:https://www.haomeiwen.com/subject/jlexnktx.html