块编辑器开发文档

@wordpress/notices

💡 云策文档标注

概述

@wordpress/notices 是一个用于状态管理和 UI 组件的 WordPress 包,提供通知功能。它通过核心数据存储 core/notices 实现,并导出 InlineNotices 和 SnackbarNotices 等 React 组件。

关键要点

  • 安装方式:通过 npm install @wordpress/notices 安装,需 ES2015+ 环境支持,否则需包含 polyfill。
  • 数据存储:模块注册在 core/notices 命名空间,可通过 wp.data.dispatch('core/notices') 访问,具体操作参考 @wordpress/data 文档和 Notices Data Handbook。
  • UI 组件:提供 InlineNotices 和 SnackbarNotices 组件,分别用于渲染默认类型和 snackbar 类型的通知,支持自定义类名和上下文。
  • 组件属性:InlineNotices 接受 children、pinnedNoticesClassName、dismissibleNoticesClassName 和 context 等 props;SnackbarNotices 接受 className 和 context props。
  • 使用示例:展示了如何结合 useDispatch 和 createSuccessNotice 创建通知,并集成组件到应用中。
  • 贡献信息:此包是 Gutenberg 项目的一部分,采用 monorepo 结构,贡献指南请参考项目主文档。

代码示例

import { useDispatch } from '@wordpress/data';
import {
    InlineNotices,
    SnackbarNotices,
    store as noticesStore,
} from '@wordpress/notices';

function AppNotices() {
    const { createSuccessNotice } = useDispatch( noticesStore );
    const noticeContext = 'my-plugin/screen';

    return (
        <>
            <button
                onClick={ () =>
                    createSuccessNotice( 'Saved successfully.', {
                        type: 'snackbar',
                        context: noticeContext,
                    } )
                }
            >
                Create snackbar notice
            </button>

            <InlineNotices
                pinnedNoticesClassName="my-plugin-notices__pinned"
                dismissibleNoticesClassName="my-plugin-notices__dismissible"
                context={ noticeContext }
            />
            <SnackbarNotices
                className="my-plugin-notices__snackbar"
                context={ noticeContext }
            />
        </>
    );
}

📄 原文内容

State management and UI components for notices.

Installation

Install the module

npm install @wordpress/notices

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.

Usage

When imported, the notices module registers a data store on the core/notices namespace. In WordPress, this is accessed from wp.data.dispatch( 'core/notices' ).

For more information about consuming from a data store, refer to the @wordpress/data documentation on Data Access and Manipulation.

For a full list of actions and selectors available in the core/notices namespace, refer to the Notices Data Handbook page.

Components

The package also exports ready-to-use notice UI components powered by the core/notices store.

InlineNotices

Renders notice lists for notices with type default:

  • non-dismissible notices in a pinned list.
  • dismissible notices in a removable list.

children are rendered inside the dismissible list.

Props

  • children: ReactNode (optional): Additional content rendered in the dismissible notice list.
  • pinnedNoticesClassName: string (optional): Extra class name added to the pinned list.
  • dismissibleNoticesClassName: string (optional): Extra class name added to the dismissible list.
  • context: string (optional): Notice context to read and remove notices from. Defaults to default.

SnackbarNotices

Renders notices with type snackbar using SnackbarList.

  • It renders the last three snackbar notices.
  • Dismiss actions are wired to removeNotice.

Props

  • className: string (optional): Extra class name added to the snackbar list.
  • context: string (optional): Notice context to read and remove notices from. Defaults to default.

Example

import { useDispatch } from '@wordpress/data';
import {
    InlineNotices,
    SnackbarNotices,
    store as noticesStore,
} from '@wordpress/notices';

function AppNotices() {
    const { createSuccessNotice } = useDispatch( noticesStore );
    const noticeContext = 'my-plugin/screen';

    return (
        <>
            <button
                onClick={ () =>
                    createSuccessNotice( 'Saved successfully.', {
                        type: 'snackbar',
                        context: noticeContext,
                    } )
                }
            >
                Create snackbar notice
            </button>

            <InlineNotices
                pinnedNoticesClassName="my-plugin-notices__pinned"
                dismissibleNoticesClassName="my-plugin-notices__dismissible"
                context={ noticeContext }
            />
            <SnackbarNotices
                className="my-plugin-notices__snackbar"
                context={ noticeContext }
            />
        </>
    );
}

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.