我试图router
从我的组件中访问我,它是未定义的.这是我的router
:
React.render(
<Provider store={store}>
{() =>
<Router>
<Route path="/" component={LoginContainer} />
</Router>
}
</Provider>,
document.getElementById('app')
);
Run Code Online (Sandbox Code Playgroud)
这是容器:
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);
Run Code Online (Sandbox Code Playgroud)
最后组件:
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;
Run Code Online (Sandbox Code Playgroud)
当我点击login
按钮时,它会点击handleLogin
容器中的内容.在我handleLogin
,我的this
价值是undefined
.我试图绑定this
到该函数constructor
,但它仍然是undefined
.
另外,当我在我的render
函数中放置一个断点时,我有一个this.context.router
,但确实如此undefined
.我怎样才能弄清楚我的this
正确性handleLogin
以及如何确保我拥有自己router
的权利context
而不是undefined
?
Dan*_*mov 11
跟上变化的最佳方法是查看" 版本"页面.
在反射路由器版本中,> 1.0.0-beta3
并且< 2.0.0-rc2
没有context.router
.相反,你需要寻找context.history
.
如果您使用版本<= 1.0.0-beta3
或>= 2.0.0-rc2
,context.router
那就在那里.简而言之,发生的事情是它被删除了支持history
但是后来维护人员决定最好隐藏路由器后面的历史库API,所以他们回到router
2.0 RC2及以后的上下文.
归档时间: |
|
查看次数: |
10050 次 |
最近记录: |