1

我使用 popper.js 实现了一个 Popper 组件,并使用 React 的 Portal 来呈现 popper 元素。

现在我想预览我的 popper 组件,但它无法在 storybook.js 上创建门户

这是我的方法。

.storybook/preview.js

import { ThemeProvider } from 'emotion-theming';
import { Global } from '@emotion/react';
import { theme, normalize } from 'custom-theme';

export const parameters = {
  actions: { argTypesRegex: '^on[A-Z].*' },
  controls: {
    matchers: {
      color: /(background|color)$/i,
      date: /Date$/,
    },
  },
};

export const decorators = [
  Story => (
    <>
      <ThemeProvider theme={theme}>
        <Global styles={normalize} />
        {Story()}
        <div id="popper-root"></div>
      </ThemeProvider>
    </>
  ),
];

门户网站.tsx

import { ReactNode, useMemo } from 'react';
import { createPortal } from 'react-dom';

interface IPortal {
  children: ReactNode;
  portalId: string;
}

const Portal = ({ children, portalId }: IPortal) => {
  const portalElement = useMemo<HTMLElement | null>(
    () => document.getElementById(portalId),
    [portalId],
  );

  if (!portalElement) {
    throw new Error(`Undefined Portal Id : ${portalId}`);
  }

  return createPortal(children, portalElement);
};

export default Portal;

捕获错误消息

错误图像

有没有办法在故事书中使用反应门户显示组件?如果没有,除了在反应项目上进行测试之外,还有其他方法可以预览它吗?

4

1 回答 1

0

preview-body.html在 旁边添加preview.js,使用以下命令:

<div id="popper-root"></div>
于 2022-01-22T12:51:15.563 回答