Próbuję uzyskać dostęp do mojego router
z poziomu mojego składnika i jest niezdefiniowany. Oto moja router
:Dlaczego mój context.router jest niezdefiniowany w moim komponencie reagowania?
React.render(
<Provider store={store}>
{() =>
<Router>
<Route path="/" component={LoginContainer} />
</Router>
}
</Provider>,
document.getElementById('app')
);
Oto pojemnik:
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);
I wreszcie komponent:
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;
Po kliknięciu na przycisk login
, to uderza handleLogin
w pojemnik. W mojej handleLogin
moja wartość wynosi undefined
. Próbowałem powiązać this
z funkcją w constructor
, ale nadal jest to undefined
.
Ponadto, gdy wstawiam punkt przerwania w mojej funkcji render
, mam this.context.router
, ale jest to undefined
. Jak mogę uzyskać poprawną this
w moim handleLogin
i jak upewnić się, że mam mój router
na context
i to nie jest undefined
?
Mam przeczucie, że ta rada jest nieaktualna. Używam routera reagującego w wersji 2.0.0-rc5 i otrzymuję ostrzeżenia, które wskazują, że jest odwrotnie. Popycha mnie do użycia context.router zamiast context.history. Czy możesz rzucić trochę światła na to? Dzięki! – Ryan
@Ryan miał to samo uczucie i może zweryfikować, że 'context.history' jest przestarzałe. Preferowany jest "context.router". Dla mnie po prostu musiałem zamienić 'history' na' router' w moim 'contextTypes'. – sighrobot
@sighrobot Dzięki, zaktualizowałem odpowiedź. –