@cloud-ru/ds-portal-context

中文文档
1.0.4发布于 2026/11/11Apache-2.0TypeScriptESM + CJS近 30 天下载 2.1万

反应背景, QQ DOM- QQ (Tooltip, Popover, Dropdown, Modal, Drawer).

中文使用文档
文档目录7 节
  1. Когда
  2. Установка
  3. Примеры
  4. \ root \ 门户连接
  5. Каскад:разные也
  6. 道具
  7. Смотри

门户连接

@cloud-ru/ds-portal-context ——反应上下文,QQ DOM-QQQQ (Tooltip, Popover, Dropdown, Modal, Drawer).

@cloud-ru/ds-portal-context -=YTET -伊甸园字幕组=- 翻译:Tooltip, (中文(简体) ), Popover, (中文(简体) ), Dropdown, (中文(简体) ), Modal, (中文(简体) ), Drawer {\fn华文仿宋\fs16\1cHD1D1D1} {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 document.body{\fn方正黑体简体\fs18\b1\bord1\shad1\3cH2F2F2F}DOM 维基语录链接:名人名言 - 翻译:.

Когда

  • DS QQ \\\\ 微前端 / 阴影 DOM - document.body {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢.
  • {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}====================================================================== ================================================================================================================================================================.
  • E2E QQ故事本 — — — — — — — — — — — — — — — — — — — — — — iframe。 。 。 .

[永久失效連結] [永久失效連結] 新浪财经 document.body。 。 。 .

Установка

pnpm add @cloud-ru/ds-portal-context
import { PortalContextProvider } from '@cloud-ru/ds-portal-context'

Примеры

\ root \ 门户连接

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}####################################################################################################################################################################################################################################### document.body。 。 。 .

import { PortalContextProvider, usePortalContext } from '@cloud-ru/ds-portal-context';
import { useMemo, useState } from 'react';
import { createPortal } from 'react-dom';

function PortalChild() {
  const root = usePortalContext();

  if (!root.current) return null;

  return createPortal(<span>Я отрендерен в кастомном root-узле через PortalContext</span>, root.current);
}

export function CustomRoot() {
  const [node, setNode] = useState<HTMLDivElement | null>(null);
  const root = useMemo(() => ({ current: node }), [node]);

  return (
    <div style={{ display: 'flex', gap: 12, flexDirection: 'column' }}>
      <PortalContextProvider root={root}>
        <span>Хост-компонент</span>
        <PortalChild />
      </PortalContextProvider>
      <div ref={setNode} data-test-id='portal-root' />
    </div>
  );
}

Каскад:разные也

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 唵(一)из(一)блока(一)теме(一)теме(一)теме(一)теме(一)теме(一)теме(一)теме(一)светлой(一)светлой(一)светлой(一)блока(一)теме(一)блока(一)блока(一)блока(一)блока(一)блока(一)блока(一)блока(一)блока(一)блока(一)блока(一)блока(一)блока(一)блока(一)блока(一)теме(一)блока(一)блока(一)блока(一)блока(一)блока(一)блока(一)блока(一)блока(一)теме(一)блока(一)блока(一)блока(一)своего(一)блока(一).

import { Button } from '@cloud-ru/ds-button';
import { Popover } from '@cloud-ru/ds-popover';
import { PortalContextProvider } from '@cloud-ru/ds-portal-context';
import { COLOR_SCHEME, ColorScheme, useThemeClassnames } from '@cloud-ru/ds-theme';
import { Tooltip } from '@cloud-ru/ds-tooltip';
import { useRef } from 'react';

import styles from './CascadingThemes.module.scss';

// Тематический блок: useThemeClassnames форсит colorScheme и эмитит полный набор sn-* на свой div.
// Этот же div — корень порталов блока (PortalContextProvider root={paneRef}), поэтому тултип и
// поповер монтируются ВНУТРЬ него и наследуют тему блока через CSS-каскад токенов.
function ThemedPane({ scheme, title }: { scheme: ColorScheme; title: string }) {
  const themeClassName = useThemeClassnames({ colorScheme: scheme });
  const paneRef = useRef<HTMLDivElement>(null);

  return (
    <div ref={paneRef} className={`${styles.pane} ${themeClassName}`}>
      <PortalContextProvider root={paneRef}>
        <p className={styles.paneTitle}>{title}</p>
        <Tooltip tip='Тултип рендерится в теме своего блока' placement='top'>
          <Button label='Навести — тултип' appearance='primary' view='filled' />
        </Tooltip>
        <Popover content='Поповер — тоже в теме блока' placement='bottom' trigger='click'>
          <Button label='Кликнуть — поповер' appearance='neutral' view='outline' />
        </Popover>
      </PortalContextProvider>
    </div>
  );
}

export function CascadingThemes() {
  return (
    <div className={styles.grid}>
      <ThemedPane scheme={COLOR_SCHEME.Dark} title='Тёмный блок' />
      <ThemedPane scheme={COLOR_SCHEME.Light} title='Светлый блок' />
    </div>
  );
}

道具

门户连接提供工具

Prop类型默认说明
childrenstring | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined—— 说
rootRefObject<HTMLElement | null>—— 说

Смотри

  • 工具提示, (中文(简体) ), 过量, (中文(简体) ), 下坠, (中文(简体) ), 模式, (中文(简体) ), 绘图器 ——потребители.

版本与发布记录

@cloud-ru/ds-portal-context 共发布 17 个版本,首次发布于 2026/08/18;过去 12 个月发布了 17 个版本。

版本发布日期距今
1.0.4latest2026/11/11今天
1.0.4-preview-e8fe6b56.0preview2026/11/11今天
1.0.4-preview-c0e895ed.02026/11/11今天
1.0.4-preview-90b10112.02026/11/11今天
1.0.4-preview-fd7dd437.02026/11/101 天前
1.0.4-preview-9a75a2a9.02026/11/101 天前

关于 @cloud-ru/ds-portal-context 的常见问题

@cloud-ru/ds-portal-context 是什么?

反应背景, QQ DOM- QQ (Tooltip, Popover, Dropdown, Modal, Drawer).

如何安装 @cloud-ru/ds-portal-context?

在项目目录运行 npm install @cloud-ru/ds-portal-context,或使用 pnpm add / yarn add / bun add。

@cloud-ru/ds-portal-context 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@cloud-ru/ds-portal-context 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@cloud-ru/ds-portal-context 可以商用吗?

@cloud-ru/ds-portal-context 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@cloud-ru/ds-portal-context 的下载量有多少?

根据 npm 官方下载统计,@cloud-ru/ds-portal-context 在 2026/10/10 – 2026/11/08 这 30 天内被下载 20,567 次,日均约 686 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cloud-ru/ds-portal-context 还在维护吗?

最新版本 1.0.4 发布于 2026/11/11(今天);至今共发布 17 个版本,其中过去 12 个月发布了 17 个;首次发布于 2026/08/18。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。