47 votes

Réagissez le routeur 4 ne met pas à jour la vue sur le lien, mais le fait sur l'actualisation

J'utilise le code de navigation simple suivant

 <Router>
  <Switch>
    <Route exact path='/dashboard' component={Dashboard} />
    <Route path='/dashboard/accounts' component={AccountPage} />
  </Switch>
</Router>

<NavLink exact to={'/dashboard'}
         disabled={this.props.item.disabled}
         activeClassName='active'>

<NavLink exact to={'/dashboard/accounts'}
         disabled={this.props.item.disabled}
         activeClassName='active'>
 

L'URL change mais la vue ne change pas. Cela change toutefois lorsque j'actualise la page ou que je vais manuellement à cette URL.

54voto

daminufe Points 674

Vous pouvez également utiliser le:

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

Et puis sur votre défaut d'exportation, vous faites comme ceci:

 export default withRouter(connect(mapStateToProps, {})(Layout));
 

Parce que lorsque vous avez une connexion d’exportation, vous devez indiquer que ce composant utilisera le routeur.

30voto

Tomasz Mularczyk Points 12030

C'est parce qu' react-redux connect méthode implémente shouldComponentUpdate qui n'entraînent pas à afficher les accessoires n'ont pas changé. Et ce n'est pas en conflit avec maintenant réagir-routeur 4.

Pour éviter cela, vous pouvez passer {pure: false} de connect comme décrit dans réagissent-redux section dépannage.

Une autre façon est d'utiliser des withRouter HOC ou à passer à l' location prop comme décrit dans les DOCS.

5voto

Tom Schinelli Points 51

J'avais mes liens Navlinks dans un composant sans état (ou composant muet) et un conteneur pour contrôler l'état d'effondrement de ma barre de navigation.

après avoir changé le conteneur navbar de PureComponent à Component , le problème a été résolu pour moi.

1voto

TDQ Points 1

J'ai rencontré ce problème. Je le résous en ajoutant la clé d'attribut au composant. Le commutateur avec la valeur est un chemin d'accès et une recherche d'emplacement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X