hooks的常用Api

Ref Hook

  • Ref Hook可以在函数组件中存储/查找组件内的标签或其他数据
  • 语法:const refContainer = useRef()
  • 获取值 refContainer .current.value
  • 作用:保存标签对象,功能与React.creatRef()一样

Effect Hook

1、Effect Hook 可以让你在函数组件中执行副作用操作(用于模拟类组件中的生命周期钩子)

2、React中副作用操作:

  • 发ajax请求数据获取
  • 设置订阅/启动定时器
  • 手动更改真实DOM

3、语法和说明

useEffect(()=>{
  //在此可以执行任何带副作用操作
  return()=>{
    // 在组件卸载前执行
  }
},[stateVlaue])  //如果指定的是[],回调函数只会在第一次render()后执行

4、可以把 uerEffect Hook 看做如下三个函数的组合

  • componentDidMount()
  • componentDidUpdate()
  • conponentWillUnmount()

State Hook

1、作用: State Hook让函数组件也可以有state状态,并进行状态数据的读写操作
2、语法:const [xxx, setXxx] = React.useState(initValue)
3、userState()说明:
参数:第一次初始值指定的值在内部作缓存
返回值:包含2个元素的数组,第一个为内部当前状态值,第2个为更新状态值的函数
4、setXxx()2种写法:
setXxx(newValue):参数为非函数值,直接指定新的状态值,内部用其覆盖原来的状态值
setXxx(vlaue=>newValue):参数为函数,接收原本的状态值,返回新的状态值,内部用其覆盖原来的状态值
5、【补】setXxx列子 ——注意复合数据类型的引用,引用未更新,不会渲染。
const [num, setNum] = useState({a:1})
setNum({ ...num, ...{arr:[4,5,6]}}) 扩展运算符修改值
setNum(Object.assign({},num,{arr:[3,4,5]})) Object.assign()

例子

import React,{Fragment} from 'react';
import ReactDom from 'react-dom';

//Fragment问答ing碎片 只有一个key属性
function Demo() {
  console.log('我执行了')
  const [count, setCount] = React.useState(0);

  const myRef = React.useRef()

  // React.useEffect(() => {
  //   // 数组中不写东西就相当于DidMount
  //   let time = setInterval(() => {
  //     setCount(count => count + 1)
  //   }, 1000)
  //   return () => {
  //     // return里相当于WillUnmount
  //   clearInterval(time)
  //   }
  // },[])
  
  function add(){
    setCount(count + 1)
    // setCount(count=>count+1)
  }

  function show() {
    alert(myRef.current.value)
  }

  function unMount() {
    ReactDom.unmountComponentAtNode(document.getElementById('root'))
  }

  return (
    <div>
      <input type="text" ref={myRef} /><button onClick={show}>提示</button>
      <br />
      <button onClick={add}>加一</button>{count}
      <button onClick={unMount}>卸载组件</button>
      <hr />
    </div>
  )
}

export default Demo

useContext

// 孙组件代码,父组件传值与context代码一致
import { useEffect,useContext } from 'react';
import Mycontext from './store'

export default () => {
  const user = useContext(Mycontext);
  useEffect(
    () => {
      console.log(user)
    },[]
  )

  return (
    <>
      b组件
      <br/>
    </>
  )
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值