React Router Dom v6 - 函數作為 React 子節點無效

絕地施梅迪

我正在嘗試升級到反應路由器 dom 的 v6。該應用程序有效,但我似乎無法讓測試用例正常工作。

在我們用這個包裝開玩笑之前:

const render = (ui: React.FC, path: string, route: string): RenderResult => {
    const history = createMemoryHistory({ initialEntries: [route] });
    const queryClient = new QueryClient({
        defaultOptions: {
            queries: {
                retry: false,
            },
        },
    });

    return {
        ...render(
            <QueryClientProvider client={queryClient}>
                <Router history={history}>
                    <Route path={path} component={ui} />
                </Router>
            </QueryClientProvider>,
        ),
    };
};

在遵循 v6 的文檔後,我讓應用程序開始工作,並將 jest 的包裝器更新為以下解決方案:

return {
        ...render(
            <QueryClientProvider client={queryClient}>
                <Router location={history.location} navigator={history}>
                    <Routes>
                        <Route path={path} element={ui} />
                    </Routes>
                </Router>
            </QueryClientProvider>,
        ),
    };

這會導致以下錯誤:

警告:函數作為 React 子節點無效。如果您返回 Component 而不是從 render 返回,則可能會發生這種情況。或者,您可能打算調用此函數而不是返回它。

項目中的大部分組件都是功能組件。所以讓這個工作是很重要的。:/

德魯里斯

Route在 RRDv6 中將組件渲染為 a的語法是作為 JSX 文字而不是作為對組件的引用。

例子:

<Route path="/thepath" element={<MyComponent />} />

對於您的示例,它ui是必須呈現為 JSX組件。重命名uiUi使其成為有效的 React 組件並相應地呈現。

const render = (Ui: React.FC, path: string, route: string): RenderResult => {
  const history = createMemoryHistory({ initialEntries: [route] });
  const queryClient = new QueryClient({
    defaultOptions: {
      queries: {
        retry: false,
      },
    },
  });

  return {
    ...render(
      <QueryClientProvider client={queryClient}>
        <Router location={history.location} navigator={history}>
          <Route
            path={path}
            element={<Ui />} // <-- JSX, not reference
          />
        </Router>
      </QueryClientProvider>,
    ),
  };
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

React Router Dom v6 中的重定向

React Router Dom V6 嵌套路由属性

React-Router-Dom v6 中的重定向

React/Typescript 条件路由 - 从 React Router Dom v5 更新到 v6

在 React js react-router-dom V6 中實現嵌套路由

函數作為 React 子元素無效。如果您從渲染中返回 Component 而不是 <Component /> ,則可能會發生這種情況。在反應 v6

React-router-dom (v6) 和 Framer Motion (v4)

React Router v6 onclick

React Router V6 activeStyle 问题

MUI Drawer 不使用 React-router-dom v6 渲染

在 react-router-dom (v6) 中使用 Navlink 傳遞道具

在 react-router-dom v6 中的 history.replace

React-router-dom v6,URL更改但组件未呈现

如何在课堂上从 react-router-dom v6 获取参数值

如何在 react-router-dom v6 的活动 NavLink 中显示不同的图标?

嵌套路由 react-router-dom v6 不起作用

如何導航到 React Router Dom V6 中的嵌套路由

react-router-dom V6 中的嵌套路由

使用 <Navigate /> 傳遞 props (react-router-dom v6)

React Router Dom V6 中的 <Link> 标记未按预期工作

使用 react-router-dom v6 导航不起作用

react-router-dom v6 在当前页面上渲染新页面

React Router Dom v6 检测用户离开页面并做一些事情

我如何将其升级到 react-router-dom v6

在 react router v6 中使用導航功能時如何傳遞數據

react-router v6 仍然無法區分 '/' 和 '/*'

useParams() 無法動態獲取路徑 react-router v6

React router v6 嵌套路由不顯示子元素

使用 react-router-dom (v6) 成功登录后,Reactjs 重定向到仪表板页面