reactjs react-router-dom createHashRouter未找到任何与basename属性匹配的项

14ifxucb  于 2023-05-28  发布在  React
关注(0)|答案(1)|浏览(348)

我根据react-router-dom网站上的教程创建了一个reactJS + RRD的简单实现,一旦我从他们的文档中获得了一个工作版本,我就修改了哈希路由的实现。在main.js中的代码如下所示:

import React from 'react';
import ReactDOM from 'react-dom/client';

import {
    createHashRouter,
    createBrowserRouter,
    RouterProvider,
} from "react-router-dom";

const routes = [
    {
        path: '/',
        element: <div>Hello world!</div>,
    }
];

const router = createHashRouter(routes, {
        basename: 'transfers'
    }
);

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
    <React.StrictMode>
            <RouterProvider router={router} />
    </React.StrictMode>
);

看起来很简单
我从www.example.com的URL访问该应用程序https://www.localenv.dev/react#transfers
下面是我的package.json:

{
  "dependencies": {
    "@reduxjs/toolkit": "1.9.2",
    "@testing-library/jest-dom": "5.16.5",
    "@testing-library/react": "13.4.0",
    "@testing-library/user-event": "13.5.0",
    "axios": "1.3.4",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-redux": "8.0.5",
    "react-router-dom": "6.11.2",
    "react-scripts": "5.0.1",
    "storybook-addon-pseudo-states": "2.0.1",
    "web-vitals": "2.1.4"
  },
  "scripts": {
    "predev": "node predev.js",
    "dev": "webpack --mode=development",
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "storybook": "storybook dev -p 6006",
    "build-storybook": "storybook build"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest",
      "plugin:storybook/recommended"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "@babel/preset-react": "7.18.6",
    "@storybook/addon-essentials": "7.0.12",
    "@storybook/addon-interactions": "7.0.12",
    "@storybook/addon-links": "7.0.12",
    "@storybook/blocks": "7.0.12",
    "@storybook/preset-create-react-app": "7.0.12",
    "@storybook/react": "7.0.12",
    "@storybook/react-webpack5": "7.0.12",
    "@storybook/testing-library": "0.0.14-next.2",
    "babel-plugin-named-exports-order": "0.0.2",
    "copy-webpack-plugin": "11.0.0",
    "css-loader": "6.7.3",
    "eslint-plugin-storybook": "0.6.12",
    "html-webpack-plugin": "5.5.0",
    "prop-types": "15.8.1",
    "storybook": "7.0.12",
    "webpack": "5.75.0",
    "webpack-cli": "5.0.1"
  }
}

当访问实现了RRD的页面时,我会收到以下控制台消息:
<Router basename="/transfers"> is not able to match the URL "transfers" because it does not start with the basename, so the <Router> won't render anything.
我可以做些什么来解决这个问题?
我尝试修改“basename”的值,将“path”修改为显式的URL值和catch-all(“/”和“”)值,通过使用createBrowserRouter()测试其他故障点并验证了在使用“path”的catch-all值时这是有效的,并深入研究了文档(https://reactrouter.com/en/main/routers/create-hash-router)以获取其他props传递给createHashRouter()。

q5lcpyga

q5lcpyga1#

简短的回答是RRD不支持哈希模式的配置。它需要一个严格的哈希结构#/。如果添加一个basename属性,则强制执行的结构采用#/basename的形式。RRD中没有使用#basename/这样的结构的解决方法。
更多详情请参见注解。

相关问题