当前位置: 首页 > 知识库问答 >
问题:

您不能在另一个内渲染——使用React Router 6和Storybook

邢焱
2023-03-14

我理解错误消息,但不确定在这种情况下应该如何处理它。我相信使用下面的decorator会导致这个问题,但是decorator需要在Storybook中使用组件。

以下是错误消息:

You cannot render a <Router> inside another <Router>. You should never have more than one in your app.

相信这是由于装饰,我只能假设BrowserRouter在我的应用程序上游找到,但据我所知,Storybook没有加载我的索引文件。所以我不确定如何继续。

以下是简化的组件:

export const Component = () => {
  ...

  return (
    <Routes>
          <Route path="/screening" element={<Screening {...propBag} />} />
        </Routes>
  );
};

然后,故事:

import { Story, Meta } from '@storybook/react';
import { MemoryRouter } from 'react-router-dom';

import { Component } from '..';

export default {
  title: 'Province',
  component: Component,
  decorators: [
    (Story) => (
      <MemoryRouter>
        <Story />
      </MemoryRouter>
    )
  ],
} as Meta;

const Template: Story = (args) => <IntakeQuestionnaire {...args} />;

export const Province = Template.bind({});
Province.parameters = {};
Province.args = {};

最后,预览。js文件:

import 'tailwindcss/tailwind.css';
import { MockedProvider } from '@apollo/client/testing';

import { i18n } from './i18next';

export const parameters = {
  i18n,
  locale: 'en',
  locales: {
    en: 'English',
    fr: 'Français',
  },
  actions: { argTypesRegex: '^on[A-Z].*' },
  controls: {
    matchers: {
      color: /(background|color)$/i,
      date: /Date$/,
    },
  },
  apolloClient: { MockedProvider },
};

export const decorators = [
  (Story) => (
      <MemoryRouter>
        <Story />
      </MemoryRouter>
    )
];

共有1个答案

越涛
2023-03-14

不确定原因,但正在从预览中删除装饰器数组。js文件并将其仅放在组件故事文件中修复了此问题。虽然不太理想,但至少我现在已经畅通无阻了

export default {
  title: 'Province',
  component: Component,
  decorators: [
    (Story) => (
      <MemoryRouter>
        <Story />
      </MemoryRouter>
    )
  ],
} as Meta;
 类似资料:
  • 这是我的应用程序。js文件这是一个错误:错误:您不能在另一个内部渲染一个。你的应用程序中不应该有多个。 此代码适用于React Router Dom版本5,但当我转到React Router Dom版本6时,出现了此错误。

  • 最近,我决定重温一些LWJGL渲染代码,这些代码是我根据LWJGLWiki上的教程使用索引VBOs编写的。在我的台式电脑上,一切正常,但当我切换到学校笔记本电脑时,它拒绝渲染任何内容。 我有以下渲染代码: GL20.glUseProgram(pId);System.out.println(“NO Error? ” (GL11.glGetError() == GL11.GL_NO_ERROR));

  • 问题内容: 我想将其他类的一些值传递给渲染器。渲染器计算出值之后,我在帮助器类中有了一个互斥锁,该互斥体应该告诉我渲染器已完成计算,因此我可以继续使用这些新值。我可以毫无问题地传递渲染器的值,但是我不知道如何找回它们。我目前使用一些静态变量,但是在渲染器更改它们之后,它们似乎丢失了。它们在我的其他课程中不可见。例: 一类 } 在我的渲染器中 : 我的助手班: hasCalculated在渲染器中肯

  • 问题内容: 如何从不属于将要渲染到的视图的控制器中渲染? 例如: 如何从页面渲染页面视图? post_controller.rb 问题答案: 似乎有几种方法可以实现此目的: 您如何使用Ruby onRails响应控制器中的另一个js文件? 在Rails中渲染红宝石的替代视图

  • 问题内容: 我需要能够在文本区域(即,,,)中呈现一些HTML标记,但是textareas仅将其内容解释为文本。有没有一种简单的方法,而无需依赖外部库/插件(我正在使用jQuery)?如果没有,您知道我可以使用任何jQuery插件吗? 问题答案: 这与不可能。您正在寻找的是一个内容可编辑的 div,这很容易做到:

  • 在上文中,我们从多个角度讨论了如何优化页面加载性能。但一个用户体验良好的页面,不仅要快速加载,还需要有一系列流畅的交互。从而,这一节我们把目光投向页面渲染性能。 渲染流程 浏览器在渲染页面前,首先会将 HTML 文本内容解析为 DOM,将 CSS 解析为 CSSOM。DOM 和 CSSOM 都是树状数据结构,两者相互独立,但又有相似之处。DOM 树描述了 HTML 标签的属性,以及标签之间的嵌套关