react-router Router.HistoryLocation 使用 <noscript> 离开目标,但没有完美工作

Posted

技术标签:

【中文标题】react-router Router.HistoryLocation 使用 <noscript> 离开目标,但没有完美工作【英文标题】:react-router Router.HistoryLocation leaves target with <noscript> but without works perfectly 【发布时间】:2015-06-11 08:42:07 【问题描述】:

我刚刚离开了 ReactJs 的起点并发现了 react-router。很棒的东西,但我看不到让以下代码与“Router.HistoryLocation”一起作为运行函数的第二个参数。

这一切都完美无缺,但在 url 中不使用 #。 This Q 让我将 Router.HistoryLocation 作为第二个参数,github docs 也是如此。但是,当我在浏览器中运行它时,结果是目标只填充了这个:

<noscript data-reactid=".0"></noscript>

这是在 jsbin 上运行的代码:http://jsbin.com/saxutulaxi/1/。如果您编辑代码并从最后一位中删除“Router.HistoryLocation”,则一切正常,但没有。 p>

这是我正在运行的简单脚本。 // 这直接来自 react-router 文档中的 overview.md 变种路由器=反应路由器; var DefaultRoute = Router.DefaultRoute; var Link = Router.Link; var Route = Router.Route; var RouteHandler = Router.RouteHandler;

var App = React.createClass(
    render: function () 
        return (
        <div>
            <header>
                <ul>
                    <li><Link to="inbox">Inbox</Link></li>
                    <li><Link to="calendar">Calendar</Link></li>
                </ul>
            </header>

            /* this is the important part */
            <RouteHandler/>
        </div>
        );
    
);

var Inbox = React.createClass(
    render: function () 
        return (
            <div>
                This is the inbox
            </div>
        );
    
);

var Calendar = React.createClass(
    render: function()
        return (
            <div>
                This is the calendar
            </div>
        );
    
);

var routes = (
    <Route name="app" path="/" handler=App>
        <Route name="inbox" handler=Inbox/>
        <Route name="calendar" handler=Calendar/>
        <DefaultRoute handler=Inbox/>
    </Route>
);

Router.run(routes, Router.HistoryLocation, function (Handler) 
    React.render(
        <Handler/>,
        document.querySelector('#content')
    );
);

不知道除了在这里问还能做什么,因为我想我已经按照信中的指南...

谢谢, 约翰

【问题讨论】:

【参考方案1】:

您的代码是正确的,但是由于该应用程序在 iframe 中运行,其中 url 不是 react-router 所期望的,因此它无法在 JSBin 上运行。在 JSBin 的情况下,iframe 报告 /runner 的 HistoryLocation。

&lt;Route name="app" path="/runner" handler=App &gt; 修复了您在 JSBin 上的问题。

【讨论】:

完美,非常感谢。我没有意识到你必须宣布这一点。为了让我的应用程序正常工作,我想在路径后使用反应路由器:....com/wish/。所以我不得不用斜杠设置路径:path="/wish/" 关键是 JSBin 虽然很棒,但并不总是准确地反映 lib 在真实页面上的作用。在这种情况下,这是因为您正在与 JSBin 本身共享地址栏。

以上是关于react-router Router.HistoryLocation 使用 <noscript> 离开目标,但没有完美工作的主要内容,如果未能解决你的问题,请参考以下文章

[react-router] React-Router 3和React-Router 4有什么变化?添加了什么好的特性?

[react-router] React-Router怎么获取历史对象?

[react-router] React-Router怎么设置重定向?

[react-router] React-Router的实现原理是什么?

react-router v6对比react-router v5

[react-router] React-Router怎么获取URL的参数?