zoukankan      html  css  js  c++  java
  • 个人对于React Hooks 的理解

    useRef 获取dom元素

    useContext 对React中context本身功能在hooks里的应用

    useReducer 借助于Redux的语法,做的一个useState的扩展,与Redux完全不同,Redux是全局状态管理的,而useReduce是管理当前组件的,争对单组件

    useMemo 性能优化缓存数据

    useCallback 性能优化缓存函数

    useRef

    let myref=useRef(null);
    useEffect(()=>{
    console.log(myref.current)
    },[])
    <button ref={myref} />

    class类

    let {Provider,Consumer}=React.createContext('123')
    最外层
    <Mycontext.Provider value={"456"}>
    <Consumer>
    {value => /*根据上下文 进行渲染相应内容*/}
    </Consumer>
    </Mycontext>

    hooks

    useContext
    let {Provider,Consumer}=React.createContext('默认值')

    性能优化
    (对于react父子组件来说,父组件变化,子组件无条件渲染)

    CLASS优化方案:scu生命周期和PureComponemt做优化

    shoudComponentUpdate(nextProps,nextState){
    if(nextState.count!==this.state.count){//可以通过递归进行深度比较但是耗费性能,所以最好数据扁平化
    return true;//可以渲染
    }
    return false//不可以渲染
    }

    为此React浅比较可以使用PureComponemt模式纯组件,会默认在scu中进行浅比较

    class List extends React.PureComponent {
    constructor(props){
    super(props)
    }
    shouldComponentUpdate(){} //浅比较
    }

    在hooks中
    useMemo 缓存数据
    useCallback 缓存函数


    useMemo

    import React,{useState,memo,useMemo} from 'react';
    //第一步 用memo包裹子组件
    //第二步 父组件使用用useMemo缓存变量,有依赖
    
    const Child=memo(({userInfo})=>{return <div>{userInfo.name}<div/>})
    
    function App(){
    //const userInfo={name:"kxz"}
    const userInfo= userMemo(()=>{return {name:"kxz"}},[name])
    return <div> <Child userInfo={userInfo}></ Child></div>
    }
    

     

    自定义hooks

    hooks命名以use开头

    hooks只能在最外层使用

    hooks调用顺序必须保持一致

    import {useState,useEffect} from 'react'
    import axios from 'axios'
    
    function useAxios(url){
        let [loading,setLoading] = useState(false);
        let [data,setData] = useState();
        let [error,setError] = useState();
    
        useEffect(()=>{
            setLoading(true);
            axios.get(url).then((res)=>{
                setData(res)
            }).catch((err)=>{
                setError(err)
            })
        },[url])
    
        return [loading,data,error]
    }
    
    export default useAxios
    import {useState,useEffect} from 'react'
    
    function useMousePosition(){
        let [x,setX] = useState(0);
        let [y,setY] = useState(0);
    
        useEffect(()=>{
            function mouseMoveHandler(event){
                setX(event.clientX)
                setY(event.clientY);
            }
            document.body.addEventListener('mousemove',mouseMoveHandler)
            return ()=> document.body.removeEventListener('mousemove',mouseMoveHandler)
        },[])
    
        return [x,y]
    }
    
    export default useMousePosition
  • 相关阅读:
    php根据数组的某个值倒序和升序
    php函数排序方法 和 判断变量类型
    安装composer
    app生成token值 jwt生成
    Verilog语法基础讲解之参数化设计
    Verilog HDL基础语法讲解之模块代码基本结构
    NIOS II CPU复位异常的原因及解决方案
    关于Quartus II 13.0对应开发NIOS II软件程序时报错Symbol 'NULL' could not be resolved问题的解决方法
    ALTFP_CONVERT IP使用与仿真
    altera soc体验之旅 FPGA与ARM的窃窃私语
  • 原文地址:https://www.cnblogs.com/kangxinzhi/p/14945465.html
Copyright © 2011-2022 走看看