【问题标题】:React Router v4 not rendering componentsReact Router v4 不渲染组件
【发布时间】:2018-02-10 22:19:59
【问题描述】:

React Router v4 渲染组件存在问题。在应用程序的初始加载时,它将呈现与 URL 对应的正确组件但是,任何后续的 Link 单击都不会呈现所需的组件。

  • React Router: 4.2.2
  • 反应:15.6.1
  • 反应 DOM:15.6.1
  • -- 仅提及库以防影响--
    • React Redux:5.0.6
    • Redux:3.7.2
    • 材质界面:0.19.0

为了简洁起见,将省略一些imports

网站结构

index.jsx
  |
  App.jsx
    |
    Auth.jsx
      |
      Layout.jsx
        <Routes />   

index.jsx

import React from 'react';
import store from './store.js';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { BrowserRouter } from 'react-router-dom';

import createBrowserHistory from 'history/createBrowserHistory';
const history = createBrowserHistory();

import App from './containers/App.jsx';

ReactDOM.render(
  <Provider store={store}>
    <MuiThemeProvider muiTheme={muiTheme}>
      <BrowserRouter>
        <App />
      </BrowserRouter>
    </MuiThemeProvider>
  </Provider>,
  document.getElementById('root')
);

App.jsx

import React, { Component } from 'react';
import Auth from '../components/Auth.jsx';

class App extends Component {
  render() {
    return <Auth />;
  }
}

Auth.jsx

import React from 'react';
import { Route } from 'react-router-dom';
import Layout from './Layout.jsx';

export default function Auth(props) {
  //this Has a render function to render a Loader, Error Page, or the Layout
  return <Layout />;
}

Layout.jsx

渲染整个应用程序涉及到更多复杂性。我将把其他布局组件注释掉,只使用一些链接和一个Switch 组件来使其工作,然后再使项目更加模块化。

import React, { Component } from 'react';
import { Link, Switch, Route } from 'react-router-dom';

import Overview from './views/overview/Overview.jsx';
import Home from './views/home/Home.jsx';

export default class Layout extends Component {
  render() {
    return (
      <div className="layout">
        {/* <TopBar /> */}
        {/* <AppBar/> */}
        {/* <Drawer>
              <MainMenu/>
            </Drawer> */}

            <Link to="/">HOME</Link>
            <Link to="/overview">Overview</Link>
            <Switch>
                <Route path="/" exact component={Home} />
                <Route path="/overview" component={Overview} />
            </Switch>

        {/* <Routes /> */}
        {/* <Footer /> */}
      </div>
    );
  }
}

Routes.jsx

这就是我想要的路由组件的样子。

import React from 'react';
import { Switch, Route } from 'react-router-dom';

import Home from './views/home/Home.jsx';
import Overview from './views/overview/Overview.jsx';
import Admin from './views/admin/Admin.jsx';
import NotFound from './NotFound.jsx';

export default function Routes(props) {
  return (
    <Switch>
      <Route path="/" exact component={Home} />
      <Route path="/overview" component={Overview} />
      <Route path="/admin" component={Admin} />
      <Route component={NotFound} />
    </Switch>
  );
}

我是否缺少一些东西来让组件呈现单击Link?我没有收到任何控制台错误或任何告诉我有问题的信息。所以不确定组件是否未正确包装或可能导致问题的原因。

【问题讨论】:

    标签: javascript reactjs react-router react-router-v4


    【解决方案1】:

    【讨论】:

    • 感谢您的回答,我会试一试并查看结果。我只根据 React Router v4 文档选择了withRouter 选项。但我也对使用pure: false 设置感到好奇。
    【解决方案2】:

    看起来发生的事情是 Redux 集成阻止了更新。

    需要:

    import {withRouter} from 'react-router-dom';

    export default withRouter(connect(mapStateToProps, mapDispatchToProps)(App))'

    Documentation

    【讨论】:

    • 感谢您分享答案。我遇到了同样的问题,这也解决了我的问题。再次感谢您的应用,祝您好运!
    • 我目前正在设置我的 react 应用程序并遇到了这个问题。我还没有添加任何 redux 功能。我想我的问题是我需要放置哪个组件withRouter?我正在使用配置设置我的路由:[reacttraining.com/react-router/web/example/route-config]
    猜你喜欢
    • 1970-01-01
    • 2019-01-15
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    相关资源
    最近更新 更多