美文网首页
react16新特性

react16新特性

作者: 祝家庄打烊 | 来源:发表于2020-02-15 16:03 被阅读0次

    生命周期

    1、getSnapshotBeforeUpdate
    状态改变时触发,触发在render之前,传递两个参数,上一个props和上一个state,返回值作为componentDidUpdate第三个参数传入。

    getSnapshotBeforeUpdate(prevProps, prevState){
        return 456
    }
    componentDidUpdate(perProps, perState, perScrollHeight){
        console.log("perScrollHeight",perScrollHeight);
    }
    

    2、componentDidCatch
    捕获子组件的错误信息

    componentDidCatch(error){
        console.log("error",error);
    }
    

    新语法

    1、React.Fragment
    每个组件都会有个根元素进行包裹,通过React.Fragment可以让列表元素独立存在组件。

    <React.Fragment>
         <div onClick={()=>this.child()}>Catch1</div>
         <div onClick={()=>this.child()}>Catch2</div>
         <div onClick={()=>this.child()}>Catch3</div>
    </React.Fragment>
    

    2、React.memo
    React.memo() 和 PureComponent 很相似,它帮助我们控制何时重新渲染组件。父组件的状态更新不会影响子组件的渲染,我们可以仅仅让某些组件进行渲染。
    class Catch extends React.PureComponent
    export default React.memo(Catch)
    3、React.createContext
    父组件可以隔代传递数据给子组件,父组件通过Provider定义数据,子组件通过Consumer接收数据。
    context.js文件

    import React from 'react';
    let {Provider ,Consumer} = React.createContext();
    export {Provider ,Consumer};
    

    父组件

    render(){
        return <Provider value={this.state}>
            {this.props.children}
        </Provider>
    }
    

    子组件

    render(){
        let {path ,component:Component} = this.props;
        return <Consumer>
            {(state)=>{
                console.log(state)
            }}
        </Consumer>
    }
    

    hooks

    无状态组件也就函数形式的组件无法定义状态,也没有生命周期,hooks提供了这些功能。减少class定义组件的复杂行、对组件进行了优化。
    1、useState定义状态

    import React, { useState } from 'react';
    function Hook(){
        const [getCount,setCount] = useState(99);
        const [getName,setName] = useState("祝阳");
        return (
            <div>
                <p>姓名:{getName}   年纪:{getCount}</p>
                <button onClick={()=>setCount(getCount+1)}>click</button>
            </div>
        )
    }
    export default Hook;
    

    2、useEffect定义生命周期

    //componentDidMount和componentDidUpdate都会触发
    useEffect(()=>{
        console.log("生命周期")
    });
    //componentDidMount触发
    useEffect(()=>{
        console.log("生命周期")
    },[]);
    //componentDidUnmount触发
    useEffect(()=>{
            return ()=>{
                console.log("生命周期")
            }
        },[]);
    //componentUpdate触发
    const mounted = useRef();
    useEffect(()=>{
        if(!mounted.current){
            //componentDidMount
            mounted.current=true
        }else{
            //componnentDidUpdate
        }
    });
    

    3、useContext参数传递
    根组件的定义

    <CountContext.Provider value={count}>
        <Counter />
    </CountContext.Provider>
    

    子组件的定义

    import React, { useState , createContext , useContext } from 'react';
    function Child(){
        const count = useContext(CountContext)  //得到count
        return (<h2>{count}</h2>)
    }
    

    相关文章

      网友评论

          本文标题:react16新特性

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