为了便于自定义主题,dumi 提供了一套主题 API,我们可以从 dumi/theme
中 import 出以下内容。
可获取到 dumi 的配置项、当前路由的 meta 信息、国际化语言选择项等等,context 的详细定义可 查看源代码
包装后的 umi Link
,可渲染外链,自动加上外部链接图标。
包装后的 umi NavLink
,可渲染外链,自动加上外部链接图标。
包装后的 umi NavLink
,用于带锚点的链接,且可高亮。
Object
。主题 Previewer
组件接收到的 propsString
。CodeSandbox创建 demo 时调用的API地址,默认值为https://codesandbox.io/api/v1/sandboxes/define
Function
。在 CodeSandbox.io 打开 demo 的执行函数根据 Previewer
的 props 生成一个函数,执行后可在 codesandbox.io 打开该 demo,例如:
// builtins/Previewer.tsximport React from 'react';import { useCodeSandbox } from 'dumi/theme';export default props => {const openCSB = useCodeSandbox(props);return <button onClick={openCSB}>点我会在 CodeSandbox.io 上打开 demo</button>;};
Function
。拷贝执行函数,执行时传入的文本会被拷贝到剪贴板'ready' | 'copied'
。默认值为 ready
,在执行拷贝后会变成 copied
,2s 后再变回 ready
,便于开发者控制复制成功的提示信息提供复制函数及复制的状态,便于实现源代码复制和状态展示,例如:
// builtins/Previewer.tsximport React from 'react';import { useCopy } from 'dumi/theme';export default props => {const [copyCode, copyStatus] = useCopy();return <button onClick={() => copyCode('Hello')}>点我会复制文字</button>;};
String
。当前输入框的关键字Function
。如果用户开启 algolia,则返回 algolia 的绑定函数,将输入框的 CSS 选择器传入即可,后续筛选、呈现工作全部交给 algoliaArray
。如果用户未开启 algolia,则返回基于关键字的内置搜索结果,目前只能搜索标题根据配置自动提供 algolia 的绑定函数或者根据关键字返回内置搜索的检索结果,具体用法可参考 dumi 内置主题的 SearchBar 组件。
String
。当前 locale 值Object
。需要过滤、转换的 propsObject
。过滤、转换之后的 props根据 locale 自动过滤、转换 props,便于实现国际化 FrontMatter 的定义,比如 title.zh-CN
在中文语言下会被转换为 title
,具体示例可参考 dumi 内置主题的 Previewer 组件。
String
。主题 Previewer
组件接收到的 identifier
参数,demo 的唯一标识符String
。demo 单独打开的页面地址获取单独打开 demo 的页面地址,例如 useDemoUrl(props.identifier)
会返回类似 http://example.com/~demos/demo-id
的 URL。
String
。主题 API
组件接收到的 identifier
参数,API 的唯一标识符Array
。Props 属性列表获取指定组件的 API 元数据,可参考 dumi 默认主题的 API 组件实现。
String
。当前的语言选项String
。要在 TypeScript Playground 中转换的 TSX 代码String
。前往 TypeScript Playground 的 url获取当前 TypeScript 官网 Playground 的链接,用于将 TSX 代码提交到 Playground 中展示 JSX 代码。
'light' | 'dark' | 'auto'
。当前的 color 值(color: 'light' | 'dark' | 'auto') => void
。设置当前 color 的函数,设置为 auto
时意味着跟随操作系统的偏好设置当我们需要为主题增加暗黑/明亮模式的切换能力时,需要用到该 API。
对于开发者而言:
[data-prefers-color=dark]
的属性选择器,在主题 Less 中增量编写暗黑模式的样式,例如.navbar { /* 明亮样式 */ }[data-prefers-color=dark] .navbar { /* 暗黑样式 */ }// 或者.navbar {/* 明亮样式 */[data-prefers-color=dark] & {/* 暗黑样式 */}}
import React from 'react';import { usePrefersColor } from 'dumi/theme';export default props => {const [color, setColor] = usePrefersColor();return (<><button onClick={() => setColor('auto')}>启用自动主题色</button>当前主题色配置为:{color}</>);};
更多信息可参考 #543。