useContext封装使用示例

1.封装,封装一个account账户功能的上下文

import { createContext, useContext } from 'react'

import type { UserFollowersRes, UserInfoRes } from '@/api/user/types'
import { CONTEXT_ERR } from '@/errors/context'

interface Value {
  userInfo: UserInfoRes | null
  useUserInfo: () => any
  isPending: boolean
  isOtherUser: boolean
  isAgent: boolean
  refetchUserInfo: VoidFunction
  followers?: UserFollowersRes
  followingResults: ReturnType<any>
  refetchFollow: () => void
}

const AccountContext = createContext<Value | null>(null)

export const AccountProvider = AccountContext.Provider

export const useAccountContext = () => {
  const context = useContext(AccountContext)
  if (!context) {
    throw CONTEXT_ERR.notFound('AccountProvider')
  }

  return context
}

2.使用

import { AccountProvider } from '@/contexts/account'

export const AccountPage = () => {
return (
    <AccountProvider
      value={{
        userInfo: otherUserInfo,
        useUserInfo: useUserInfo,
        isPending: false,
        isOtherUser: userInfo?.user_id !== userId,
        isAgent: query.t === UserCategory.Agent,
        followingResults: () => {},
        refetchFollow: () => {},
        refetchUserInfo: () => {},
      }}
    </AccountProvider>
  )
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值