React函数组件

47 阅读1分钟

创建方式

//第一种
const Hello =(props)=>{
    return <div>{props.message}</div>
}
//第二种
const Hello =props=><div>{props.message}</div>
//第三种
function Hello (props){
    return <div>{props.message}</div>
}

举例 - 做一个+1的按钮

const App=()=>{
    const [n,setN]=React.useState(0)
    const onClick=()=>{
        setN(n+1)
    }
    return <div>
        {n}
        <button onClick={onClick}>+1</button>
    </div>
}

useEffect

const App = (props) => {
    const [childVisible, setChildVisible] = React.useState(true);
    const hide = () => {
        setChildVisible(false);
    };
    const show = () => {
        setChildVisible(true);
    };
    return <div>
        {childVisible ? <button onClick={hide}>hide</button> : <button onClick={show}>show</button>}
        {childVisible ? <Child/> : null}
    </div>;

};
const Child = (props) => {
    React.useEffect(() => {
        console.log('挂载或更新了');
        return () => {
            console.log('销毁了');
        };
    });
    return <div>Child</div>;
};

模拟componentDidMount

useEffect(()=>{console.log('第一次渲染')},[])

模拟componentDidUpdate

useEffect(()=>{console.log('任意属性变更')})
useEffect(()=>{console.log('n变了')},[n])

模拟componentWillUnmount

 React.useEffect(() => {
        console.log('第一次渲染');
        return () => {
            console.log('销毁了');
        };
    });

自定义Hook

做一个第一次不算的useEffect组件

useUpdate

第一次由undefined变成0时不执行函数
第二次变化时,执行函数
第三次变化时,执行函数

const useUpdate = (fn, array) => {
   const [count, setCount] = React.useState(0);
   React.useEffect(() => {
       setCount(count + 1);
   }, array);
   React.useEffect(() => {
           if (count > 1) {
               fn();
           }
       }, [count]
   );
};