useMemo

2020-08-13  本文已影响0人  一土二月鸟

用法

import React, { useCallback, useState, Fragment } from 'react';
import Child from './Child';

export default () => {

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

    const cb = useCallback(() => {
        setCount(count => count + 1);
    }, [count]);
    
    return (
        <Fragment>
            <div>count is {count}</div>
            <Child click={cb}/>
        </Fragment>
    );
}
import React, { memo } from "react";

type ChildProps = {
  click: () => void;
};

// 经过memo封装后,当props未发生变化时不会被重新渲染。
export default memo<ChildProps>((props) => {
  const { click } = props;
  console.log("i am child");

  return <div onClick={click}>i am child</div>;
});

import React, { useState, useMemo } from "react";
import ReactDOM from "react-dom";

const App = () => {

  const [ a, setA ] = useState(0);
  const [ b, setB ] = useState(0);

  const memos = useMemo( () => {
    console.log('memos...')
    return a;
  }, [a] );


  const clickABtn = () => {
    setA(a + 1);
  }

  const clickBBtn = () => {
    setB(b + 1);
  }

  return (
    <>
      a: {a}
      <br />
      b: {b}
      <br />
      <button onClick={clickABtn}>A click</button>
      <br />
      <button onClick={clickBBtn}>B click</button>
    </>
  );
};

ReactDOM.render(<App />, document.getElementById("root"));

上一篇 下一篇

猜你喜欢

热点阅读