块编辑器开发文档

💡 云策文档标注

概述

本文档介绍了 @wordpress/components 包,这是一个用于创建 WordPress 仪表盘通用 UI 元素的组件库。它提供了安装、设置、使用和贡献指南,帮助开发者在 WordPress 环境中集成和使用这些组件。

关键要点

  • @wordpress/components 包包含通用 WordPress 组件,用于构建仪表盘共享的 UI 元素。
  • 安装需使用 npm install @wordpress/components --save,并确保 ES2015+ 环境支持。
  • 许多组件需要加载 CSS 样式表,在 WordPress 内部需通过 wp_enqueue_style 依赖管理,外部应用可直接导入。
  • 使用示例包括从包中导入组件(如 Button)并在 React 组件中渲染。
  • Popover 组件默认渲染到文档 body,可通过 Popover.Slot 和 SlotFillProvider 精确控制渲染位置。
  • TypeScript 支持通过 React.ComponentProps 提取组件 props 类型。
  • 文档和示例可在 https://wordpress.github.io/gutenberg/ 浏览,贡献指南参考 Gutenberg 项目。

代码示例

import { Button } from '@wordpress/components';

export default function MyButton() {
    return <Button>Click Me!</Button>;
}
import { Popover, SlotFillProvider } from '@wordpress/components';
import { MyComponentWithPopover } from './my-component';

const Example = () => {
    <SlotFillProvider>
        <MyComponentWithPopover />
        <Popover.Slot />
    </SlotFillProvider>;
};
import type { ComponentProps } from 'react';
import { Button } from '@wordpress/components';

export default function MyButton( props: ComponentProps< typeof Button > ) {
    return <Button { ...props }>Click Me!</Button>;
}

注意事项

  • 确保代码运行在 ES2015+ 环境,否则需包含 @wordpress/babel-preset-default 中的 polyfill。
  • 在 WordPress 内部使用组件时,正确管理样式表依赖以避免加载顺序问题。
  • Popover 组件的渲染位置可通过 SlotFillProvider 和 Popover.Slot 灵活控制,适用于复杂 UI 布局。
  • TypeScript 用户需使用 React.ComponentProps 来获取组件 props 类型,因为包不直接导出这些类型。
  • 贡献到包或 Gutenberg 项目时,请参考主贡献指南和包的特定贡献信息。

📄 原文内容

This package includes a library of generic WordPress components to be used for creating common UI elements shared between screens and features of the WordPress dashboard.

Installation

npm install @wordpress/components --save

This package assumes that your code will run in an ES2015+ environment. If you’re using an environment that has limited or no support for such language features and APIs, you should include the polyfill shipped in @wordpress/babel-preset-default in your code.

Setup

Many components require the package’s CSS stylesheet to be loaded.

Within WordPress

To ensure proper load order, add the wp-components stylesheet as a dependency of your plugin’s stylesheet. See wp_enqueue_style documentation for how to specify dependencies.

Outside WordPress

Load the stylesheet in your application:

import '@wordpress/components/build-style/style.css';

The RTL version of the stylesheet is available at @wordpress/components/build-style/style-rtl.css.

Usage

Within Gutenberg, these components can be accessed by importing from the components root directory:

/**
 * WordPress dependencies
 */
import { Button } from '@wordpress/components';

export default function MyButton() {
    return <Button>Click Me!</Button>;
}

Popovers

By default, the Popover component will render within an extra element appended to the body of the document.

If you want to precisely control where the popovers render, you will need to use the Popover.Slot component.

The following example illustrates how you can wrap a component using a
Popover and have those popovers render to a single location in the DOM.

/**
 * External dependencies
 */
import { Popover, SlotFillProvider } from '@wordpress/components';

/**
 * Internal dependencies
 */
import { MyComponentWithPopover } from './my-component';

const Example = () => {
    <SlotFillProvider>
        <MyComponentWithPopover />
        <Popover.Slot />
    </SlotFillProvider>;
};

TypeScript

This package exposes its own types for the components it exports, however it doesn’t export its own types for component props. If you need to extract the props type, please use React.ComponentProps to get the types from the element.

import type { ComponentProps } from 'react';
import { Button } from '@wordpress/components';

export default function MyButton( props: ComponentProps< typeof Button > ) {
    return <Button { ...props }>Click Me!</Button>;
}

Docs & examples

You can browse the components docs and examples at https://wordpress.github.io/gutenberg/

Contributing to this package

This is an individual package that’s part of the Gutenberg project. The project is organized as a monorepo. It’s made up of multiple self-contained software packages, each with a specific purpose. The packages in this monorepo are published to npm and used by WordPress as well as other software projects.

To find out more about contributing to this package or Gutenberg as a whole, please read the project’s main contributor guide.

This package also has its own contributing information where you can find additional details.