javascript - 当使用 react-redux v5 设置 React v15.5 时,路由不导航

标签 javascript reactjs react-router react-redux react-router-redux

我是 React 的新手,我已经使用 Facebook 的 create-react-app 设置了我的 React 项目。 .以下是核心文件:

Index.js

import React from 'react';
import ReactDOM, { render } from 'react-dom';
import { BrowserRouter as Router } from 'react-router-dom';
import createHistory from 'history/createBrowserHistory';

import { createStore, applyMiddleware } from "redux";
import { Provider } from 'react-redux'
import { routerMiddleware, syncHistoryWithStore } from 'react-router-redux';
import thunk from 'redux-thunk';
import reducers from './reducers';

import App from './containers/App';
import Routes from "./Routes";

const browserHistory = createHistory();
middleware = routerMiddleware(browserHistory);
const store = createStore(reducers, applyMiddleware(middleware, thunk))
const history = syncHistoryWithStore(browserHistory, store);

ReactDOM.render(
  <Provider store={store}>
    <Router history={browserHistory}>
      <App />
    </Router>
  </Provider>, document.getElementById('root')
);

Routes.js

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

import Home from './containers/Home';
import About from './containers/About';
import Contact from './containers/Contact';

class Routes extends Component {
  render() {
    return (
      <Switch>
        <Route exact path="/" component={ Home } />
            <Route path="/about" component={ About } />
            <Route path="/contact" component={ Contact } />
      </Switch>
    );
  }
}

export default Routes;

App.js

import React, { Component } from "react";
import { Link } from 'react-router-dom';
import Routes from "../Routes";
import SideNav from '../presentation/SideNav';

class App extends Component {
    render() {
        return (
            <div>
              <Link to='/'>Home</Link>
              <Link to='/about'>about</Link>
              <Link to='/contact'>contact</Link>
              <SideNav />
               <Routes />
            </div>
        );
    }
}

export default App;

我在这里面临的问题是,当我使用特定路径加载页面时,该组件正在浏览器上呈现。 但是如果我使用“链接”导航到不同的路线,比如

<Link to='/contact'>contact</Link>

在这种情况下,/contact 组件不会加载,但路由会发生变化并反射(reflect)在浏览器中。

我寻找解决方案,但大多使用折旧代码,即使在 react-router-redux 中也是如此,示例包含不在更新包中的 ConnectedRouter

These dependencies is being used

我不知道是我在代码中犯了一些愚蠢的错误还是遗漏了什么。

提前致谢。 :)

最佳答案

解决方案是here

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

// before
export default connect(mapStateToProps)(Something)

// after
import { withRouter } from 'react-router-dom'
export default withRouter(connect(mapStateToProps)(Something))

通常,React Router 和 Redux 可以很好地协同工作。但有时,应用程序可能有一个组件在位置更改时不更新(子路由或事件导航链接不更新)。

如果出现这种情况:

  • 组件通过 connect()(Comp) 连接到 redux。
  • 该组件不是“路由组件”,这意味着它不会像这样呈现:<Route component={SomeConnectedThing}/>

问题在于 Redux 实现了 shouldComponentUpdate,如果它没有从路由器接收到 props,则没有任何迹象表明发生了任何变化。这很容易修复。找到连接组件的位置并将其包装在 withRouter 中。

关于javascript - 当使用 react-redux v5 设置 React v15.5 时,路由不导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45075400/

相关文章:

javascript - Angularjs 模型仅在 View 中更改,而不在 Controller 中更改

javascript - 删除鼠标悬停时的 Css 类

javascript - 使用代码从 HTML 表单中获取所有输入字段名称

javascript - 使用 .map、.filter、.reduce 将 JSON 数据重新排列为兼容格式

javascript - React Suspend 后的组件未加载?

javascript - React Router 的 HashRouter 重定向到 <base> 标签 url

JavaScript 和 Canvas 问题

reactjs - 如何使用 useReducer 钩子(Hook)测试组件?

javascript - 如何从ReactJS中的初始页面请求中获取HTTP请求 header

javascript - 如何在路由更改时卸载组件