Sto tentando di accedere al mio router
dal mio componente e non è definito. Qui è la mia router
:Perché il mio context.router non è definito nel mio componente di reazione?
React.render(
<Provider store={store}>
{() =>
<Router>
<Route path="/" component={LoginContainer} />
</Router>
}
</Provider>,
document.getElementById('app')
);
Ecco il contenitore:
class LoginContainer extends React.Component {
constructor() {
super();
}
static propTypes = {
handleLogin: PropTypes.func.isRequired
}
static contextTypes = {
router: React.PropTypes.object
}
handleLogin() {
this.props.dispatch(Actions.login(null, null, this.context.router));
}
render() {
return (
<Login
auth={this.props}
handleLogin={this.handleLogin}
/>
);
}
}
function mapStateToProps(state) {
return {
stuff: []
}
}
export default connect(mapStateToProps)(LoginContainer);
E infine il componente:
import React, { PropTypes } from 'react';
class Login extends React.Component {
static propType = {
handleLogin: PropTypes.func.isRequired
}
static contextTypes = {
router: React.PropTypes.object
}
render() {
return (
<div className="flex-container-center">
<form>
<div className="form-group">
<button type="button" onClick={this.props.handleLogin}>Log in</button>
</div>
</form>
</div>
);
}
}
module.exports = Login;
Quando clicco sul pulsante login
, colpisce il handleLogin
nel contenitore. Nel mio handleLogin
, il mio valore this
è undefined
. Ho provato a collegare this
alla funzione nello constructor
, ma è ancora undefined
.
Inoltre, quando inserisco un punto di interruzione nella mia funzione render
, ho un this.context.router
, ma è undefined
. Come faccio a ottenere il mio this
corretto nel mio handleLogin
e come posso essere sicuro di avere il mio router
su context
e non è il undefined
?
Ho la sensazione che questo consiglio sia obsoleto. Sto usando react-router versione 2.0.0-rc5 e ricevo avvertimenti che indicano che è vero il contrario. Mi sta spingendo ad usare context.router invece di context.history. Puoi per favore fare un po 'di luce su questo? Grazie! – Ryan
@Ryan ha avuto questo stesso sentimento e può verificare che 'context.history' è deprecato. 'context.router 'è preferito. Per me ho semplicemente dovuto sostituire 'history' con' router' nei miei 'contextTypes'. – sighrobot
@sighrobot Grazie, ho aggiornato la risposta. –