gpt4 book ai didi

javascript - react 路由器只显示主路由

转载 作者:行者123 更新时间:2023-12-01 00:56:39 25 4
gpt4 key购买 nike

我使用 React router dom 版本 5.0.1 来创建一个简单的 React 应用程序,并使用 rollup 进行捆绑,这是我的路由器组件

      return(
<Router>
<Switch>
<Route path='/' component={Main} />
<Route path='/hello' component={Hello} />
<Route path='/login' component={Login} />
</Switch>
</Router>
)

问题是它只在 localhost:8000/显示主路由,但是当我尝试访问 localhost:8000/hello 或 localhost:8000/login 时,它给了我这个错误

    404 Not Found

C:\Users\omar_\Desktop\form-builder\form-builder\frontend\public\hello

(rollup-plugin-serve)

这是我的 rollup.config

    import babel from "rollup-plugin-babel";
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import replace from 'rollup-plugin-replace';
import serve from 'rollup-plugin-serve'

export default {
input: 'src/index.js',
plugins: [

resolve({
browser: true,
}),
commonjs({
include: [
'node_modules/**',
],
exclude: [
'node_modules/process-es6/**',
],
namedExports: {
'node_modules/react/index.js': ['Children', 'Component', 'PropTypes', 'createElement'],
'node_modules/react-dom/index.js': ['render'],
'node_modules/react-is/index.js': ['isValidElementType'],
},
}),
babel({
exclude: "node_modules/**",
}),
replace({
'process.env.NODE_ENV': JSON.stringify('development'),
}),
serve('public')
],
output: {
file: "public/bundle.js",
format: "cjs",
sourcemap: 'inline'
}

};

最佳答案

简短回答:

问题是 rollup-plugin-serve 服务器未配置为处理 404。客户端路由器会发生这种情况。

有两件事最有可能解决该问题:

改变这个

    serve('public')

至此

    serve({ contentBase: 'public', historyApiFallback: true })

如果这不能解决问题,请检查公共(public)文件夹中的index.html,因为问题可能是它没有引用根目录中的index.js 和其他一些资源。

例如:

<html>
<head>
<title>Application</title>
</head>
<body>
<script src="/index.js"></script>
</body>
</html>

请注意//index.js , 这一点很重要。如果您将其设为相对值( <script src="index.js"></script> ),则可能会导致 CSR 出现问题。

稍微长一点的答案:

客户端路由器(CSR)通过包装浏览器位置 API 来工作,您可以在它可以拦截的页面中创建特殊链接。

当你第一次加载页面时,通过在浏览器中输入url,页面中还没有运行javascript,因此请求发送到服务器,服务器必须知道这是一个前端页面并返回根html ,即使服务器端没有任何匹配的路由。

historyApiFallback: true rollup-plugin-serve 中的 flag 将其配置为每次无法匹配 url 时从公共(public)文件夹返回 index.html 页面。

在index.html 中引用相关资源时,这可能会导致问题。例如:

  • 调用端点 /users/1
  • Rollup 服务无法找到其资源,因此默认返回 index.html
  • index.html 引用相对的index.js <script src="index.js"></script>
  • 浏览器尝试通过执行 get /users/1/index.js 来获取资源
  • Rollup 服务找不到静态资源,默认返回index.html

关于javascript - react 路由器只显示主路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56526050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com