Ich stoße auf eine Endlosschleife beim Versuch, meine Komponenten Routen mit einem HOC-Wrapper zu rendern. Die Routing-Render-Methode sieht ungefähr so aus:Reaction HOC Endlosschleife, wenn im Routing angewendet
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>
);
Zur Zeit Befinden (da es Looping out), wird die HOC nicht wirklich etwas zu tun, außer die Komponente mit einer anderen Klasse Verpackung.
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);
}
Der Versuch, eine beliebige Route zu treffen, verursacht eine Endlosschleife.
Entschuldigung, das ist ein Tippfehler beim Entfernen eines Ternärs in der Renderrequisite. Wir haben eine andere Funktion, um mit einer Fabrik zu rendern. Original-Snippet aktualisiert, um die fehlende Klammer zu korrigieren. – mindlis
Ja, Ereignis mit korrektem Typ. Sie sollten stattdessen 'render = {this.render ...}' oder 'render = {() => this.render ...}' aufrufen. Ihre Art zu binden führt die 'render' Funktion sofort aus, wobei' render' nicht an 'requisiten' übergeben wird –