Je rencontre une boucle infinie lorsque j'essaie de rendre mes routes de composant avec un wrapper HOC. La méthode render routage ressemble à quelque chose comme:Réagissez la boucle infinie HOC lorsqu'elle est appliquée au routage
const render = (route, additionalProps) => {
const scrollActive = has(route, "scroll") ? route.scroll : true;
const Component = scrollActive
? withScrollToTop(route.component)
: route.component;
return props => {
return <Component {...props} {...additionalProps} route={route} />;
};
return (
<Switch>
{routes.map((route, i) => {
return (
<Route
key={i}
path={route.path}
exact={route.exact}
strict={route.strict}
render={render(route, injectProps)}
/>
);
})}
</Switch>
);
Pour le moment-être (car il tourne en boucle sur), le COH ne fait quoi que ce soit en plus enveloppant le composant avec une autre classe.
export default function withScrollToTop(WrappedComponent) {
const displayName = `HigherOrder.WithScrollToTop('${getDisplayName(
WrappedComponent
)}')`;
class WithScrollToTop extends React.PureComponent {
static displayName = displayName;
static WrappedComponent = WrappedComponent;
render() {
const props = Object.assign({}, this.props);
return React.createElement(WrappedComponent, props);
}
}
return hoistStatics(WithScrollToTop, WrappedComponent);
}
Toute tentative d'accès à une route provoque une boucle infinie.
Désolé, c'est une faute de frappe d'enlever un ternaire dans le prop de rendu. Nous avons une autre fonction à rendre avec une usine. Extrait d'origine mis à jour pour corriger l'accolade manquante. – mindlis
Oui, événement avec le type correct. Vous devriez plutôt appeler 'render = {this.render ...}' ou 'render = {() => this.render ...}'. Votre façon de relier exécute la fonction 'render' tout de suite, sans passer' render' à 'props' –