J'utilise le routeur de réaction v4 et j'essaie d'enrouler ma tête autour d'un problème lié au routeur de réaction/redux/HOC. J'ai un composant d'ordre supérieur qui fonctionne. Le HOC lui-même est connect()
-ed à redux store. Cette approche fonctionne parfaitement si je le fil dans un <Route />
via un component
prop: <Route path="/profile" component={ withAuth(Profile) } />
fonctionne.Réagissez Routeur/Redux/HOC ne fonctionne pas avec 'prop'
Cependant, lorsque je tente de faire la même chose avec un <Route />
et un rendu prop il ne pas travail: <Route path="/profile" render={() => withAuth(Profile) } />
La console lance « Route.render(): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.
» Il fonctionne quand j'omettez le HOC: <Route path="/profile" render={() => <Profile /> } />
si je soupçonne un problème le HOC mais je ne peux pas le trouver.
La raison pour laquelle j'essaie d'utiliser render
, c'est que je souhaite transmettre des accessoires supplémentaires au COH. D'ailleurs ça m'embête de ne pas pouvoir trouver le bug.
Est-ce que quelqu'un avec un oeil frais peut jeter un coup d'oeil et me mettre sur le bon chemin? Merci!
/* === app.js === */
import React, { Component } from 'react';
import { Route } from 'react-router-dom';
import { Provider } from 'react-redux';
import Header from './header';
import Home from './home';
import Content from './about';
import Profile from './profile';
import withAuth from './withAuth';
import store from '../reducers/store';
export default class App extends Component {
render() {
return (
<Provider store={store}>
<div className="mdl-grid">
<Header />
<main className="mdl-layout__content">
<div className="page-content">
<Route path="/" exact component={Home} />
<Route path="/about" component={Content} />
<Route path="/profile" render={() => withAuth(Profile) } />
</div>
</main>
</div>
</Provider>
)
}
}
/* === withAuth.js (Higher order component) === */
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { Redirect } from 'react-router-dom';
const HOC = WrappedComponent => {
return class extends Component {
render() {
if (this.props.auth) {
return <WrappedComponent authenticated={this.props.auth} {...this.props} />
} else {
return <Redirect to="/" />
}
}
}
}
function mapStateToProps({ auth }) {
return { auth };
}
export default WrappedComponent => connect(mapStateToProps)(HOC(WrappedComponent));