• react-hook


    1.memo  用于优化方法

    const Foo=memo((props)=>{
      return <div>{props.person.age}</div>
    })

    2.useState

    const [count,setCount]=useState(()=>{
        return PaymentResponse.defaultCount || 0
      })

     3.useEffect

    const App=(props)=>{
      const [count,setCount]=useState(()=>{
        return props.defaultCount || 0
      })
      const [size,setSize]=useState({
        document.documentElement.clientWidth,
        height:document.documentElement.clientHeight
      })
    
      const onResize=()=>{
        setSize({
          document.documentElement.clientWidth,
          height:document.documentElement.clientHeight
        })
      }
    
      
      useEffect(()=>{
        window.addEventListener('resize',onResize,false)
        return ()=>{
          window.removeEventListener('resize',onResize,false)
        }
      },[])
      
    
      return ( 
        <div>
          <button onClick={()=>{setCount(count+1)}}>Click{count}</button>
        </div>
       );
    }
     
    export default App;

    4.UseContext

    import React, { useState,useContext,createContext } from 'react';
    
    const CountContext=createContext()
    
    const Counter=()=>{
      const count=useContext(CountContext)
      return(
        <div>
          {count}
        </div>
      )
    }
    
    const App=(props)=>{
      const [count,setCount]=useState(0)
      return ( 
        <div>
          <button onClick={()=>setCount(count+1)}>click</button>
          <CountContext.Provider value={count}>
            <Counter />
          </CountContext.Provider>
        </div>
       );
    }
     
    export default App;

    5.useMemo&useCallback

    import React, { useState,useMemo,memo,useCallback } from 'react';
    
    
    const Counter=memo((props)=>{
      console.log('render Counter')
      return(
        <div onClick={()=>props.onClick()}>
          {props.count}
        </div>
      )
    })
    
    const App=()=>{
      const [count,setCount]=useState(0)
    
      const double=useMemo(()=>{
        return count*2
      },[count==3])
    
      const onClick=useCallback(()=>{
        console.log('onClick')
      },[])
    
      return ( 
        <div> 
          <button onClick={()=>setCount(count+1)}>click</button>     
          <Counter count={double} onClick={onClick} />
        </div>
       );
    }
     
    export default App;

    6.useRef

    import React, {Component, useState,useMemo,memo,useCallback,useRef,PureComponent } from 'react';
    
    
    class Counter extends Component{
      speak(){
        console.log('now Counter is '+this.props.count)
      }
      render(){
        const {props} =this
        return(
          <h1 onClick={props.onClick}>{props.count}</h1>
        )
      }
    }
    
    const App=()=>{
      const [count,setCount]=useState(0)
    
      const double=useMemo(()=>{
        return count*2
      },[count==3])
    
      const onClick=useCallback(()=>{
        console.log('onClick')
        console.log(counterRef.current)
        counterRef.current.speak()
      },[])
    
      const counterRef=useRef()
    
      return ( 
        <div> 
          <button onClick={()=>setCount(count+1)}>click</button>     
          <Counter ref={counterRef} count={double} onClick={onClick} />
        </div>
       );
    }
     
    export default App;

    6.自定义hook  必须use开头

    import React, {Component, useState,useMemo,memo,useCallback,useRef,PureComponent, useEffect } from 'react';
    
    class Counter extends PureComponent{
      
      render(){
        const {props} =this
        return(
          <h1 >{props.count}</h1>
        )
      }
    }
    
    const useCount=(defaultCount)=>{
      const [count,setCount]=useState(defaultCount)
      const it=useRef()
      useEffect(()=>{
        it.current=setInterval(()=>{
          setCount(count=>count+1)
        },1000)
      },[])
    
      useEffect(()=>{
       if(count>=10){
         clearInterval(it.current)
       } 
      })
      return [count,setCount]
    }
    
    const App=()=>{
      const [count,setCount]=useCount(0)
    
      return ( 
        <div> 
          <button onClick={()=>setCount(count+1)}>click</button>     
          <Counter  count={count} />
        </div>
       );
    }
     
    export default App;

    hooks法则

    1.hooks要在顶层调用  意思是不能再条件语句 循环语句 中调用

    2.尽在函数组件和自定义函数中调用  不能再其他普通函数中调用

  • 相关阅读:
    SpringMVC07处理器方法的返回值
    html01基本标签
    java09数组的使用
    SpringMVC06以对象的方式获取前台的数据
    面向对象的程序设计(五)借用构造函数继承
    面向对象的程序设计(四)原型链继承
    面向对象的程序设计(三)对象字面量创建原型方法与直接创建原型方法的区别
    面向对象的程序设计(二)理解各种方法和属性typeof、instanceof、constructor、prototype、__proto__、isPrototypeOf、hasOwnProperty
    面向对象的程序设计(一)创建对象的各种方法
    二叉树的层次遍历
  • 原文地址:https://www.cnblogs.com/lxz-blogs/p/12794191.html
Copyright © 2020-2023  润新知