gpt4 book ai didi

reactjs - 访问react-router动态段时崩溃

转载 作者:行者123 更新时间:2023-12-03 12:57:57 24 4
gpt4 key购买 nike

我的路线配置如下所示(仅显示我认为可能相关的部分):

var React = require('react');

var Router = require('react-router');
var { Route, DefaultRoute, NotFoundRoute } = Router;

var routes = (
<Route handler={AppHandler}>
<DefaultRoute handler={HomeHandler}/>
<Route name='home' path='/home' handler={HomeHandler}/>
<Route name='settings' path='/settings/?:tab?' handler={SettingsHandler}/>
<NotFoundRoute handler={NotFoundHandler}/>
</Route>
);

Router.run(routes, Router.HistoryLocation, function (Handler) {
React.render(<Handler/>, document.getElementById('application'));
});

现在,在我的设置 react 文件中,我有以下内容:

var Settings = React.createClass({
mixins: [Router.State],
render: function() { ... }
});

如果我访问host.local/settings并记录this.getParams()一切正常,文件渲染显示 Object {tab: undefined}在控制台中。但一旦我尝试host.local/settings/user - 我期望控制台返回类似 Object {tab: 'user'} 的内容-,整个事情在某个地方崩溃并开始抛出 Uncaught SyntaxError: Unexpected token <在控制台中。

React 还很年轻,因此在许多情况下错误相当模糊。

我已遵循 Path Matching Guide 上提供的规范 而且它看起来很标准,所以我只能假设这是 react 路由器本身的问题或者我错过了什么?

<小时/>

更新

tl;dr:这不是react-router的问题。

长版:

显然,问题不在于 ReactJS,也不在于 React-Router 本身。它主要涉及 gulp-webserver 上的一个错误(我正在使用它来使用代理连接并行运行的单独项目进行开发),并且当直接在浏览器上键入 URL 而不是被访问时会触发错误通过链接。

我做了一个测试,导航时工作正常,但按照 this github issue 中所述直接访问时会崩溃。 ,这基本上使我的功能深度链接测试不可行,但在生产中应该可以工作。

<小时/>

更新2

tl;dr:这也不是 gulp-webserver 的问题。

就我而言,它与relative相关。和absolute正如前面提到的,gulp-webserver 没有任何问题。更具体地说,我必须确保您的脚本和 CSS 引用是绝对的,这样它就不会尝试在您在 URL 中键入的路径中找到它们。

例如:

您有两个网址:/settings/settings/account 。在这种情况下,如果您的脚本包含在后备文件中,类似于 <script src="scripts/main.js"></script> ,服务器将为其返回 404,因为 /settings/scripts/main.js 中没有文件。 .

我真是个傻瓜,但万一其他人也上当了,我希望这会有所帮助。

<小时/>

最佳答案

感谢您的分析,它帮助我意识到这不是 React Router 的问题,而是我自己的路径的问题。

我添加了<base href="/" />进入<head>我的index.html它起作用了(:

针对 React Router 3 进行编辑:

自 2016 年初以来,当您设置 <base> 时,React Router 将显示警告:

Warning: Automatically setting basename using <base href> is deprecated 
and will be removed in the next major release. The semantics of <base href>
are subtly different from basename. Please pass the basename explicitly in the
options to createHistory

最好这样做:

const history = useRouterHistory(createHistory)({
basename: '/'
});

关于reactjs - 访问react-router动态段时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28253162/

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