【React】--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(()=>{} ,[])

useCallbackuseMemo的区别:

  • 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)获取数值,实现数据共享,同时减少组件层级,不再需要写<GlobalContext.Consumer></GlobalContext.Consumer>标签

子组件(使用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)

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值