如何修复React Router组件不会随着路由更改而更新

时间:2019-03-28 03:40:40

标签: react-router-dom

我在我的reactJs应用程序中使用react-router-dom进行路由。我有一个路由,帐户,其中包含嵌套的路由。在“帐户”组件中,我想根据当前路线(param.id)显示不同的组件。现在,初始组件正在渲染,但是当我单击链接时,无论url中的变化如何,我的Account组件仍会渲染该初始组件。如何获取我的帐户组件以更新url的更改。还是我应该在AccountSwitch组件中做一些事情以识别url的更改并更新props.match.params.id的当前值?

// app.js
<Router>
    <Route path="/account" component={Account} />
</Router>

// account.js
class Account extends Component {
    render() {
        return (
            <div>
                <Link to="/account">Messages</Link>
                <Link to="/account/orders">Orders</Link>

                <Route exact path="/account" component={Messages} />
                <Route path="/account/:id" component={AccountSwitch} />
            </div>
        )
    }
}

// accountSwitch.js
const AccountSwitch = props => {
    switch(props.match.params.id) {
        case '':
            return (
                <AccountMessages />
            );
        case 'orders':
            return (
                <AccountOrders />
            )
        default:
            return <span>select a page<span/>
    }
}

3 个答案:

答案 0 :(得分:1)

https://github.com/Rynebenson/og-website/blob/master/src/_components/wrappers/Account/index.js中使用路由开关的地方,请尝试对“ / account”使用完全匹配项,看看是否可行。

使用:

<Switch>
  <Route exact path={`/account`} component={AccountMessages} />
  <Route path={`/account/:id`} component={AccountSwitch} />
</Switch>

在导出时全部尝试以下操作:

使用路由器导出默认值(connect(mapStateToProps,mapDispatchToProps)(帐户))

答案 1 :(得分:0)

使用<Switch>

// app.js
import {BrowserRouter as Router, Route, Switch } from 'react-router-dom';
<Router>
  <Switch>
    <Route path="/account" component={Account} />
  </Switch>
</Router>

// account.js
import { Route, Switch } from 'react-router-dom';

class Account extends Component {
    render() {
        return (
            <div>
                <Link to="/account">Messages</Link>
                <Link to="/account/orders">Orders</Link>
                <Switch>
                    <Route exact path="/account" component={Messages} />
                    <Route path="/account/:id" component={AccountSwitch} />
                </Switch>
            </div>
        )
    }
}

答案 2 :(得分:0)

您尝试过路由器吗?

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

const AccountSwitch = props => {
    switch(props.match.params.id) {
        case '':
            return (
                <AccountMessages />
            );
        case 'orders':
            return (
                <AccountOrders />
            )
        default:
            return <span>select a page<span/>
    }
}
export default withRouter(AccountSwitch)