react新特性hooks开发

react新特性hooks开发

react组件开发有两种形式一种是基于类的开发,一种是通过function+hooks开发
hooks是可以让react在不使用类定义的时候,在使用方法也可以有状态的一种方式

1.UseState

注意:useState不能进行条件渲染不然就报错,另外还有这个方法是异步打印是之前的值,如果数值没改变可以选择用div进行展现
在这里插入图片描述

import './App.css';

import React, { useState } from 'react' //首先引入useState

export default function App() {
  const [count,setState]=useState(1)
   //在这里说明一下useState(初始值)这里用的数组结构方式跟对象结构差不多
   //useState(1)[0]=count  true  这里count在没有执行方法之前等于初始值
   //useState(1)[1]=setState  true  这里是方法
  return (
    <div>
      <p>{count}</p>
      <button onClick={()=>{setState(count+2)}}>+1</button>
    </div>
  )
}
2.useEffect

这个hooks 相当于代替类组件中的componentDidMountcomponentDidUpdate这两个生命周期函数
也就是初次渲染跟修改的时候

 useEffect(()=>{
    console.log('我触发了'); //这个函数会在组件初次渲染跟组件改变时触发
  })
3.useRef

useRef可以看作是一个可以自定义的盒子,他在整个组件的生命周期的值是不变的

因此我们需要这样做

import React, { useRef, useState, useEffect } from 'react'
export default function Index() {
  const [count,setCount] = useState(1)
  const numRef =  useRef(count)
  //每次count发生改变都会触发这个函数
  useEffect(()=>{
  	//因为useRef在整个生命周期中数值不改变,因此我们需要做这一步
  	//useRef创建之后会在里面创建一个current对象属性,就是元素的内容
    numRef.current = count
    console.log(numRef);
    console.log(count);
  },[count])
  return (
    <div>
      <h2>{numRef.current}</h2>
       {count}
      <button onClick={e=>setCount(count + 10)}>+10</button>
    </div>
  )
}
4.useContext

useContext相当于调用仓库的的一个方法,跟vue的时间线传值一个道理
在这里注意一个点,很多人都不理解useContext,只知道在一个文件下面写,但是两个文件写的话发现并没有什么用,并且值传不过去,其实是缺少了共同作用域,没有共同的上下文,这是我们需要提出一个共同的上下文,然后在父子组件中导入就行

在这里插入图片描述

import React , {useContext} from 'react'

const Index = ()=>{
	//1.首先创建一个上下文
    const UseContextCon = React.createContext()
    const Son = () =>{
    	//3.在son组件中取传递的数据是就需要使用useContext
        const {name}  = useContext(UseContextCon)
        return (
            <p>我是son组件 我的名字是{name}</p>
        )
    }
    const Child = () =>{
        const {name}  = useContext(UseContextCon)
        return (
            <p>我是child组件 我的名字是{name}</p>
        )
    }
    return (
    	//2.使用provider进行数据传递注意只传递给包裹里面的组件,name就是传递的数据
        <UseContextCon.Provider value={{name:'context'}}>
            <Son />
            <Child/>
        </UseContextCon.Provider>
    )
}

export default Index

5.useReducer

useReducer说白了就是对useState的一种优化方案

  • 更容易管理大量状态
  • 更容易被其他开发者理解
  • 更容易被测试

看了很多官方解释我的理解是,useReducer相当于vue中的vuex可以存储修改大量的数据,而useState只相当于里面useReducer中的dispatch函数,相当于是里面的子集,当比较分散比较简单的数据就用useState,当比较复杂比较集中的数据就用useReducer,比如对象数组

在这里插入图片描述

6.useMemo,useCallback,memo

因为在平时渲染中只要父组件中的数据发生改变,子组件也会随之发生渲染,如果说父组件中改变的数据与子组件无关,那么子组件的重新渲染就是多余的,就好比发生火灾,然后你听到火灾的地点跟你不是一个城市,那么你就不需要慌张,那么如何去避免这种渲染呢
就需要使用memo来包裹你的子组件,就好比你的家是用铁皮做的,火烧不到,加了层保护罩,但是只能做浅比较,第二个参数就是比较的数据,只能是基本数据,如果要深层次的,就需要根据你的业务环境来处理
在这里插入图片描述

memo是对组件进行一个缓存,useCallback,useMemo是对组件中的方法或者数值进行缓存
useCallback 常用与缓存返回的是一个函数也就是渲染模板 ,
useMemo常用于返回的是个数值
因此useCallback是useMemo的变体。

useMemo(()=>return fn);
//等价
useCallback(fn);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小菜鸟学代码··

给打赏的我会单独一对一讲解

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值