【问题标题】:React router not working - no errors反应路由器不工作 - 没有错误
【发布时间】:2017-09-03 01:49:58
【问题描述】:
import React, { Component } from 'react';
import './App.css';
var ReactRouter = require('react-router');
var Router  = ReactRouter.Router;
var Route = ReactRouter.Route;
var Navigation = ReactRouter.Navigation;

var StorePicker = React.createClass({
render : function() {
return (
  <form className="store-selector">
    <h2>Please Enter A Store</h2>
    </form>
)
}

});

var routes = (
<Router>
<Route path="/" component={StorePicker}/>
<Route path="store" component={App}/>
</Router>
)
export default routes;

我正在尝试使用反应路由器。此代码不起作用。它没有给出任何错误。但它给出了两个警告。


警告:失败的道具类型:道具historyRouter中标记为必填,但其值为undefined。 在路由器中


React.createElement: type is invalid -- 期望一个字符串(对于内置组件)或一个类/函数(对于复合组件)但得到:对象。

【问题讨论】:

  • 第一个警告是不言自明的。 Router 组件需要一个history 属性,而您还没有提供。请查阅您正在使用的 react-router 版本的文档。如果不知道它来自哪里,就无法诊断出第二个警告。你没有在上面的代码中调用React.createElement,所以它一定是在别的地方。
  • 响应第一个警告:check out this answer
  • 你还没有导入应用组件,但是你已经在路由中使用了。
  • @TusharKotlapure 这不是全部代码,App 仅在此代码中。抱歉没有提到:)

标签: javascript reactjs react-router


【解决方案1】:

对于警告:
(警告:失败的道具类型:道具历史记录在路由器中标记为必需,但其值未定义。在路由器中)

您缺少路由器尝试的历史定义:

<Router history={hasHistory|browserHistory|createMemoryHistory}>
  <Route path="/" component={Home} />
</Router>

注意:您必须使用 React 路由器将所选的历史记录类型添加到您的导入中,因此如果您选择添加 browserHistory,您的导入将如下所示:

import { browserHistory, Router, Route } from 'react-router'
           ^---added as a named import

不同选项的简要说明:

browserHistory :以路径“/”开头的完整 url 的路径为基础。因此,如果您的 SPA 位于 www.myapp.com,则默认情况下,根路径将对应于 www.myapp.com/。所以如果你想要一个到www.myapp.com/blog的路由,你需要定义一个路由路径'/blog'。

hasHistory:做同样的事情,但根从 url 中找到的第一个 # 字符开始:example.com/#/some/path 对应于:/some/path

createMemoryHistory:用于测试和服务器渲染。此选项不读取操作地址栏。

查看:React Router Histories 了解更多信息

【讨论】:

  • 这仍然有效。 localhost:3000 不显示“请进入商店”。我输入 browserHistory 作为 prop 并导入它。
猜你喜欢
  • 2018-04-05
  • 2017-03-19
  • 2017-12-30
  • 2017-10-02
  • 2022-10-12
  • 2018-07-13
  • 2021-03-01
相关资源
最近更新 更多