React Hooks

2023-07-18  本文已影响0人  我没叫阿

hooks

注:函数组件的每一次渲染或者更新,都是函数重新执行,产生一个新的私有上下文【也就是内部的代码需要重新执行一次】


useState()

useEffect()

useEffect和useLayoutEffect的区别?

REF?

useRef()和React.createRef()的区别?

useImperativeHandle(ref,()=>{]})

useMemo(()=>{},[])

// 示例
import React , { useMemo } from "react";
import PropTypes from "prop-types";

const VoteMain = function VoteMain(props){

  let { supNum,oppNum } = props; // 基于useMemo实现复杂逻辑的计算缓存
  let ratio = useMemo(() => 
    let ratio ='--'
        total = supNum + oppNum;
        if (total > 0) ratio = (supNum / total * 100).toFixed(2) + '%';
    return ratio;
  },[supNum,oppNum]);

  return <div className="main">
    <p>支持人数: {supNum}人</p>
    <p>反对人数: {oppNum}人</p>
    <p>支持比率: {ratio}</p>
  </div>;
}

* 属性规则校验 */
VoteMain.defaultProps = {
  supNum:0,
  oppNum:0
}
VoteMain.propTypes = {
  supNum:PropTypes.number,
  oppNum:PropTypes.number
}

useCallback(()=>{},[])

自定义hook

const usePartialState = function usePartialState(initiaValue) {
  let [state, setState] = useState(initiaValue);
  const setPartial = function setPartial(partialState) {
    setState({
      ...state,
      ...partialState,
    });
  };
  return [state, setPartial];
};

export default function Hooks() {
  const [state, setPartial] = usePartialState({
    x: 1,
    y: 1,
  });

  const handle = (type) => {
    if (type === "addX") {
      setPartial({
        x: state.x + 1,
      });
      return;
    }
    setPartial({
      y: state.y + 1,
    });
  };

  return (
    <div style={{ border: "1px solid #666", padding: "10px 20px", width: 200 }}>
      <div>
        <p>x:{state.x}</p>
        <p>y:{state.y}</p>
      </div>
      <Button onClick={handle.bind(null, "addX")}>设置x</Button>
      <Button onClick={handle.bind(null, "addY")}>设置y</Button>
    </div>
  );
}
上一篇 下一篇

猜你喜欢

热点阅读