从 redux-form 的 onSubmitSuccess 访问 this.context
Accessing this.context from onSubmitSuccess of redux-form
这是我面临的问题:
我在我的应用程序中使用了 react-router 和 redux-form。在我的一个表单中,我想在提交成功后使用路由器返回主页面。这是我的代码:
function Router(target) {
target.contextTypes = target.contextTypes || {};
target.contextTypes.router = React.PropTypes.func.isRequired;
}
enter code here
@Router
@reduxForm({
form: 'editLocation',
fields: LocationFormFields,
validate: ValidateLocationForm,
onSubmitSuccess: () => {
var path = '/locations';
this.context.router.push(path);
},
onSubmitFail: () => {
console.log('failed');
}
}, MapStateToProps)
export class EditLocation extends React.Component .....
问题是 'this.context' 没有在 onSubmitSucess 方法中定义。
我知道我可以直接使用 browserHistory 来解决这个问题。但是,我不想真的走那条路,我想使用 this.cotext。有任何想法吗?
要在组件内使用 context
,您需要指定 contextTypes
static contextTypes = {
router: PropTypes.object
};
所以我建议要么从组件内部调用函数并在那里指定 contextTypes
,要么添加一个高阶组件来处理它。
我认为你最好的选择是不要让你的表单组件与你的路由组件相同,并将 onSubmitSuccess
作为 prop 传递给你的表单组件。
import { withRouter } from 'react-router'
@withRouter // injects router as prop
export class EditLocation extends React.Component {
handleSubmitSuccess() {
this.props.router.push('/locations')
}
render() {
return <EditLocationForm
onSubmitSuccess={this.handleSubmitSuccess}/>
}
}
@reduxForm({
form: 'editLocation',
fields: LocationFormFields,
validate: ValidateLocationForm,
onSubmitFail: () => {
console.log('failed');
}
}, MapStateToProps)
export class EditLocationForm extends React.Component .....
这是我面临的问题:
我在我的应用程序中使用了 react-router 和 redux-form。在我的一个表单中,我想在提交成功后使用路由器返回主页面。这是我的代码:
function Router(target) {
target.contextTypes = target.contextTypes || {};
target.contextTypes.router = React.PropTypes.func.isRequired;
}
enter code here
@Router
@reduxForm({
form: 'editLocation',
fields: LocationFormFields,
validate: ValidateLocationForm,
onSubmitSuccess: () => {
var path = '/locations';
this.context.router.push(path);
},
onSubmitFail: () => {
console.log('failed');
}
}, MapStateToProps)
export class EditLocation extends React.Component .....
问题是 'this.context' 没有在 onSubmitSucess 方法中定义。
我知道我可以直接使用 browserHistory 来解决这个问题。但是,我不想真的走那条路,我想使用 this.cotext。有任何想法吗?
要在组件内使用 context
,您需要指定 contextTypes
static contextTypes = {
router: PropTypes.object
};
所以我建议要么从组件内部调用函数并在那里指定 contextTypes
,要么添加一个高阶组件来处理它。
我认为你最好的选择是不要让你的表单组件与你的路由组件相同,并将 onSubmitSuccess
作为 prop 传递给你的表单组件。
import { withRouter } from 'react-router'
@withRouter // injects router as prop
export class EditLocation extends React.Component {
handleSubmitSuccess() {
this.props.router.push('/locations')
}
render() {
return <EditLocationForm
onSubmitSuccess={this.handleSubmitSuccess}/>
}
}
@reduxForm({
form: 'editLocation',
fields: LocationFormFields,
validate: ValidateLocationForm,
onSubmitFail: () => {
console.log('failed');
}
}, MapStateToProps)
export class EditLocationForm extends React.Component .....