【问题标题】:React & HashRouter - got blank pagesReact & HashRouter - 得到空白页
【发布时间】:2017-08-22 08:07:40
【问题描述】:

在我通过react-router-dom 在客户端设置路由后,我得到的只是空白页。

所以,我的设置就在这里。我敢打赌有什么问题,但我无法理解。

那怎么来的?怎么了?

索引:

import React from 'react';
import ReactDOM from 'react-dom';
import { createStore } from 'redux';
import { Provider } from 'react-redux';
import {
    HashRouter as Router,
    Route,
    Link
} from 'react-router-dom'

import App from './containers/app.js';
import configureStore from './store/configureStore';
import routes from './routes';

const store = configureStore();

ReactDOM.render(
    <Provider store={store}>
        <Router routes={routes} />
    </Provider>,
    document.getElementById("content")
);

路线在这里:

import React from 'react';
import ReactDOM from 'react-dom';
import {
    HashRouter as Router,
    Route,
    Link
} from 'react-router-dom';

import App from './containers/app.js';
import Settings from './components/settings/settings.js';
import NotFound from './components/common/notfound';

export default (
    <Route exact path="/" component={App}>
        <Route exact path="/settings" component={Settings} />
        <Route path="*" component={NotFound} />
    </Route>
)

【问题讨论】:

  • localhost:61958/ 是否有任何加载,或者只是 localhost:61958/#/settings 不起作用?
  • 你使用的是哪个版本的 React Router?
  • @MarioF 可能是最后一个
  • @jolyonruss 抱歉回答迟了 - 所有链接都指向空白页

标签: javascript reactjs routing react-router


【解决方案1】:

尝试将此部分更改为:

ReactDOM.render(
    <Provider store={store}>
    <Router>
      <Route exact path="/" component={App}>
        <Route exact path="/settings" component={Settings} />
        <Route path="*" component={NotFound} />
      </Route>
    </Router>
    </Provider>,
    document.getElementById("content")
);

我认为 react-router v4 无法识别这部分:&lt;Router routes={routes} /&gt;

修订: 以上代码有两个问题。

1) 你不应该在路由中放置子路由。这部分不正确:

<Route exact path="/" component={App}>
  <Route exact path="/settings" component={Settings} />
  <Route path="*" component={NotFound} />
</Route>

2) 无论路径是什么,&lt;NotFound /&gt; 总是被渲染。

解决方案:

索引.js

import React from 'react';
import ReactDOM from 'react-dom';
import { createStore } from 'redux';
import { Provider } from 'react-redux';
import {
    HashRouter as Router,
    Route,
    Link,
} from 'react-router-dom'

import App from './containers/app.js';
import configureStore from './store/configureStore';
import routes from './routes';

const store = configureStore();

ReactDOM.render(
    <Provider store={store}>
        <Router>
          <Route path="/" component={App} />
        </Router>
    </Provider>,
    document.getElementById("content")
);

App.js

将此代码插入您要呈现内容的位置:

<Switch>
   <Route exact path="/" component={Home} />
   <Route exact path="/settings" component={Settings} />
   <Route path="*" component={NotFound} />
</Switch>

别忘了加import {Switch, Route} from 'react-router-dom';

【讨论】:

  • 如果您看到 Route (reacttraining.com/react-router/web/api/Route/children-func) 的文档,则不应使用 component 属性并将子级传递给路由。您实际上应该将所有路线都放在同一级别。可能会出现多个匹配,或者如果你只想要一个,你可以使用Switch
  • @MarioF 同意。最简单的方法是,这两条路由应该包含在App 类中。我只是复制并粘贴了他的代码,以为我也修改了该部分,他会更加困惑。所以让他先试着让它发挥作用;)
  • 哦,很有趣,但是如果我想单独保存呢?
  • 正如@MarioF 上面所说,您的路线“不正确”。首先,您不应该将子路由放置在路由内。其次,无论路径是什么,&lt;NotFound /&gt; 总是被渲染。您需要使用&lt;Switch /&gt;。现在修改我的答案。
  • 哦,现在可以了!谢谢你。我使用 hashrouter 因为我在服务器上安装了 asp.net 核心,在这种情况下比尝试处理 browserHistory 更快
猜你喜欢
  • 2020-01-30
  • 1970-01-01
  • 2017-04-22
  • 2017-06-21
  • 2020-10-11
  • 2018-09-30
  • 2020-04-06
  • 1970-01-01
  • 2021-09-05
相关资源
最近更新 更多