【React】--React hook

简介: React hook

🎀个人主页:努力学习前端知识的小羊

感谢你们的支持:收藏🎄 点赞🍬 加关注🪐


React Hook

使用hook的理由:

  • 高阶组件为了复用,导致代码层级复杂
  • 生命周期的复杂
  • 写成functional组件,无状态组件,因为需要状态,又改成了class,成本高

useState(保存组件状态)

const [state,usestate] = usestate(initialState)
  • useState是对状态state进行初始化,initialState是初始化的值
  • useState 能够返回一个数组,第一个元素是 state ,第二个是更新 state 的函数

useEffect(处理副作用)

useEffect(()=>{
},[])   //[],依赖的状态,可以传空数组

注意:不要对Dependencies撒谎,如果你明明使用了某个变量,却没有申明依赖中,你等于向React撒了谎,后果就是,当依赖的变量改变时,useEfect也不会再次执行, eslint会报警告

// 第一次执行一次,之后name(依赖)更新也会执行
useEffect(()=>{
  setName(name.substring(0,1).toUpperCase()+name.substring(1))
},[name])

useCallback(记忆函数)

防止因为组件渲染,导致方法呗重新创建,起到缓存作业,只有第二个参数变化了,才重新声明一次

const handleChange=useCallback(
        (evt)=>{
            setText(evt.target.value)
        },[]  //[]:传入依赖
    )

注意:

只有依赖发生改变,这个函数才会重新声明一次

如果传入空数组,那么就是第一次创建后被缓存,如果依赖后期改变了,得到的还是旧的依赖

如果不传第二个参数,每次都会重新声明一次,得到的就是最新的值

useMemo(记忆组件)

useMemo可以完全取代useCallback的功能,使用useMemo返回一个记忆函数是完全可以的

useMemo(()=>{} ,[])

useCallback与useMemo的区别:

  • useCallback不会执行第一个参数函数,而是将他返回,而useMemo会执行第一个函数并将函数结果返回
  • useCallback常用记忆事件函数,生成记忆后的事件函数并传递给子组件,而useMemo更适合经过函数计算得到一个确定的值

useRef(保存引用值)

const mytext = useRef() //React.createRef()
<input ref={mytext}></input>

useRef可以保存先前的数值

useContext(减少组件层级)

const GlobalContext = React.createContext() //创建context对象

父组件

<GlobalContext.Provider value={{
            call:"打电话",
            sms:"短信",
            info:info,
            changeInfo:(value)=>{
                setinfo(value)
            }
        }}>
            <div>
                <Film_detail></Film_detail>
            </div>
      </GlobalContext.Provider>

使用useContext,子组件通过useContext(GlobalContext)获取数值,实现数据共享,同时减少组件层级,不再需要写标签

子组件(使用useContext)

const value = useContext(GlobalContext)
    return <div className='film_detail'>
                detail-{value.info}
            </div>

子组件(不使用useContext)

return (
            <GlobalContext.Consumer>
                {
                    (value)=>
                        <div className='film_detail'>
                            detail-{value.info}
                        </div>
                }
            </GlobalContext.Consumer>
        )

useReduce

用来实现状态管理,usestate 的代替方案,并返回当前的state 以及与其配套的dispatch 方法

const [state,dispatch] = useReducer(reducer,intialState)

state表示状态对象, dispatch传入参数对象,根据标识执行函数方法

// 外部对象
const intialState = {
    count:0,
}
//传入参数对象
dispatch({
            type:"kerwin-minus"
        })
//处理函数
const reducer = (prevstate,action)=>{
    let newstate = {...prevstate}
    switch (action.type) {
        case "kerwin-minus":
            newstate.count--;
            return newstate
        case "kerwin-add":
            newstate.count++;
            return newstate
        default:
            return prevstate
    }
}

自定义hook

规则:必须使用use开头,这个约定非常重要,如果不遵循的话,将无法判断某个函数是否包含对其内部Hook的调用,React将无法自动检查你的Hook是否违反了Hook的规则

自定义hook

function useFilter(cinemaList,mytext){
    const getCinemaLiat = useMemo(()=>cinemaList.filter(item=>item.
        name.toUpperCase().includes(mytext.toUpperCase())|| 
        item.address.toUpperCase().includes(mytext.toUpperCase())
        ) ,[cinemaList,mytext])
    return getCinemaLiat
}

组件内调用

const {getCinemaLiat} = useFilter(cinemaList,mytext)

希望对小伙伴们有所帮助,期待你们的指点与支持✨✨✨


目录
相关文章
|
3月前
|
前端开发
React 中的 Hook 概念
【8月更文挑战第31天】
34 0
|
4月前
|
前端开发
React useImperativeHandle Hook
【7月更文挑战第1天】React useImperativeHandle Hook
28 3
|
4月前
|
前端开发 JavaScript 数据格式
react18【系列实用教程】Hooks (useState,useReducer,useRef,useEffect,useContext,useMemo,useCallback,自定义 Hook )
react18【系列实用教程】Hooks (useState,useReducer,useRef,useEffect,useContext,useMemo,useCallback,自定义 Hook )
94 1
|
4月前
|
前端开发
Vue3 【仿 react 的 hook】封装 useTitle
Vue3 【仿 react 的 hook】封装 useTitle
52 0
|
4月前
|
前端开发 API
Vue3 【仿 react 的 hook】封装 useLocation
Vue3 【仿 react 的 hook】封装 useLocation
41 0
|
6月前
|
前端开发 JavaScript
【边做边学】React Hooks (二)——useEffect Hook
【边做边学】React Hooks (二)——useEffect Hook
|
6月前
|
前端开发 JavaScript
React中useEffect Hook使用纠错
React中useEffect Hook使用纠错
42 0
|
6月前
|
自然语言处理 前端开发 JavaScript
说说你对 React Hook的闭包陷阱的理解,有哪些解决方案?
说说你对 React Hook的闭包陷阱的理解,有哪些解决方案?
117 0
|
11月前
|
自然语言处理 前端开发 JavaScript
美丽的公主和它的27个React 自定义 Hook(四)
美丽的公主和它的27个React 自定义 Hook(四)
|
11月前
|
存储 前端开发 数据可视化
美丽的公主和它的27个React 自定义 Hook(三)
美丽的公主和它的27个React 自定义 Hook(三)