Ich versuche, auf meine router
von innerhalb meiner Komponente zuzugreifen, und es ist nicht definiert. Hier ist meine router
:Warum ist mein context.router in meiner react-Komponente nicht definiert?
React.render(
<Provider store={store}>
{() =>
<Router>
<Route path="/" component={LoginContainer} />
</Router>
}
</Provider>,
document.getElementById('app')
);
Hier ist der Behälter:
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);
Und schließlich die Komponente:
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;
Wenn ich auf die Schaltfläche login
klicken, es trifft den handleLogin
in der Container. In meinem handleLogin
ist mein this
Wert undefined
. Ich habe versucht, this
an die Funktion in der constructor
zu binden, aber es ist immer noch undefined
.
Auch wenn ich einen Haltepunkt in meiner render
Funktion habe, habe ich eine this.context.router
, aber es ist . Wie bekomme ich meine this
richtig in meinem handleLogin
und wie stelle ich sicher, dass ich meine router
auf der context
habe und es nicht undefined
ist?
Ich habe eine Ahnung, dass dieser Rat veraltet ist. Ich benutze react-router Version 2.0.0-rc5 und ich bekomme Warnungen, die anzeigen, dass das Gegenteil der Fall ist. Es drängt mich, context.router statt context.history zu verwenden. Kannst du bitte etwas Licht dazu bringen? Vielen Dank! – Ryan
@Ryan hatte das gleiche Gefühl und kann verifizieren, dass "context.history" veraltet ist. 'context.router' ist bevorzugt. Für mich musste ich einfach 'history' durch' router' in meinen 'contextTypes' ersetzen. – sighrobot
@sighrobot Danke, ich habe die Antwort aktualisiert. –