zoukankan      html  css  js  c++  java
  • 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.尽在函数组件和自定义函数中调用  不能再其他普通函数中调用

  • 相关阅读:
    洛谷 1842 [USACO05NOV]奶牛玩杂技【贪心】
    洛谷 1757 通天之分组背包【分组背包】
    洛谷 1330 封锁阳光大学
    洛谷 1019 单词接龙
    【模板】CDQ分治
    BZOJ 2734 洛谷 3226 [HNOI2012]集合选数【状压DP】【思维题】
    BZOJ 2457 [BeiJing2011]双端队列
    洛谷 2015 二叉苹果树
    牛客网 牛可乐发红包脱单ACM赛 C题 区区区间间间
    牛客网 牛可乐发红包脱单ACM赛 B题 小a的旅行计划
  • 原文地址:https://www.cnblogs.com/lxz-blogs/p/12794191.html
Copyright © 2011-2022 走看看