React Hook

使用:在不编写class组件的情况下使用

useState
import React, { useState } from 'react';

function Example() {
  // 声明一个新的叫做 “count” 的 state 变量,初始值为 0
  const [count, setCount] = useState(0);

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

1.1 useEffect: 在整个页面渲染完成才会调用的代码
import React, { useEffect } from 'react';

// 清除 effect
function Example() {

  useEffect(() => {
   const subscription = props.source.subscribe();
   return () => {
     // 清除订阅
     subscription.unsubscribe();
   };
  });
  return (
    <div>
      <p>uselayoutEffec</p>
    </div>
  );
}


// effect 的条件执行
function Example() {

  useEffect(() => {
    const subscription = props.source.subscribe();
    return () => {
      subscription.unsubscribe();
    };
   }, [props.source]);  // 此时,只有当 props.source 改变后才会重新创建订阅。
  });
  return (
    <div>
      <p>uselayoutEffec</p>
    </div>
  );
}

2.1 uselayoutEffec:和原来的 componentDidmount & componentDidUpdate 一致,在react完成Dom更新马上同步调用的代码,会阻塞页面渲染
useCallback / useMemo
作用:防止因为组件重新渲染,导致方法被重新创建,起到缓存的作用,只有当第二个参数变化了,才重新声明一次;

1.1 useCallback:返回一个 memoized 回调函数

import React, { useCallback} from 'react';

function Example() {

   const memoizedCallback = useCallback(() => {
    doSomething(a, b);
   }, [a, b]);
   
   render (
     <div onClick={ () => memoizedCallback() }></div>
  )
}

1.2 useMemo: 返回一个 memoized 值

useCallback(fn, deps) 相当于 useMemo(() => fn, deps)
useRef(保存引用值)
说明:useRef 返回一个可变的 ref 对象,其 .current 属性被初始化为传入的参数(initialValue)。返回的 ref 对象在组件的整个生命周期内持续存在

import React, { useRef } from 'react';

function TextInputWithFocusButton() {
  const inputEl = useRef(null);
  const onButtonClick = () => {
    // `current` 指向已挂载到 DOM 上的文本输入元素
    inputEl.current.focus();
  };
  return (
    <>
      <input ref={inputEl} type="text" />
      <button onClick={onButtonClick}>Focus the input</button>
    </>
  );
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • react 16.8 以后加上了 react hook,它可以让你在不编写 class 的情况下使用 state ...
    forever_提拉米苏阅读 3,610评论 1 6
  • 要点: 可以在不编写class的情况下使用 state 以及其他react特性。 Hook没有破坏性改动, 完全是...
    koala949阅读 4,302评论 0 0
  • 关于React Hook React Hook 对于React来说无疑是一个伟大的特性,它将React从类组件推向...
    Mstian阅读 6,904评论 0 11
  • github的MD[https://github.com/liusanhong/study/blob/master...
    半个木头人阅读 2,087评论 0 0
  • 什么是React Hook? 一个特殊的函数,用于钩入React的特性。它鼓励我们将通用逻辑封装成Hook而不是工...
    南山码僧阅读 3,738评论 0 7