likes
comments
collection
share

如何模仿 antd 写一个 ConfigProvider

作者站长头像
站长
· 阅读数 47

如何模仿 antd 写一个 ConfigProvider

假如我们要在子组件中获取到语言但不通过 props 传入,这种全局设置很适合通过 Provider 实现。

使用

<ConfigProvider locale='en-US'>
  <ForbiddenPage />
</ConfigProvider>

实现

核心是 createContextuseContext

import type { ISupportedLocale } from '@/utils/i18n'
import React, { type FC, createContext } from 'react'

interface IProps {
  locale?: ISupportedLocale
  children?: React.ReactNode
}

interface LocaleContextProps {
  locale?: ISupportedLocale
}

export const LocaleContext = createContext<LocaleContextProps | undefined>(undefined)

export const ConfigProvider: FC<IProps> = ({ locale, children }) => {
  return <LocaleContext.Provider value={{ locale }}>{children}</LocaleContext.Provider>
}

组件内通过 React.useContext 获取 locale

const ctx = useContext(LocaleContext)
const lng: string = locale ?? ctx?.locale ?? 'zh-CN'
转载自:https://juejin.cn/post/7374410972070936612
评论
请登录