Reactjs 将redux状态映射到道具-状态被清除?
我正在使用redux,redux表单和react。我填写表单字段,提交表单,然后在结果组件中显示输入的值 Result.jsxReactjs 将redux状态映射到道具-状态被清除?,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我正在使用redux,redux表单和react。我填写表单字段,提交表单,然后在结果组件中显示输入的值 Result.jsx import React from 'react'; import { connect } from 'react-redux'; const Result = props => { console.log(props); return ( <div> test </div> ); }; const
import React from 'react';
import { connect } from 'react-redux';
const Result = props => {
console.log(props);
return (
<div>
test
</div>
);
};
const mapStateToProps = state => {
return {
formData: state.form
};
}
export default connect(mapStateToProps)(Result);
从“React”导入React;
从'react redux'导入{connect};
const Result=props=>{
控制台日志(道具);
返回(
测试
);
};
常量mapStateToProps=状态=>{
返回{
formData:state.form
};
}
导出默认连接(MapStateTops)(结果);
编辑:
import React, { Component } from 'react';
import { BrowserRouter, Route } from 'react-router-dom';
import { Provider } from 'react-redux';
import store from './state/store';
import MainForm from './containers/MainForm';
import Result from './components/Result';
class App extends Component {
render() {
return (
<Provider store={store}>
<BrowserRouter>
<div>
<Route path="/" component={MainForm} exact />
<Route path="/submitted" component={Result} />
</div>
</BrowserRouter>
</Provider>
);
}
}
export default App;
import React,{Component}来自'React';
从“react router dom”导入{BrowserRouter,Route};
从'react redux'导入{Provider};
从“./state/store”导入存储;
从“/containers/MainForm”导入MainForm;
从“./components/Result”导入结果;
类应用程序扩展组件{
render(){
返回(
);
}
}
导出默认应用程序;
编辑2:
class MainForm extends Component {
state = {
submit: false
};
handleSubmit = data => {
this.setState({ submit: true });
};
render() {
const { handleSubmit, pristine, submitting, reset } = this.props;
const { submit } = this.state;
if (submit) {
return <Redirect to="/submitted" />;
}
return (
<Wrapper>
<h2>Some header</h2>
<FormWrapper onSubmit={handleSubmit(this.handleSubmit)}>
// FORM FIELDS..
<Button variant="contained" color="primary" type="submit" disabled={submitting}>
Submit
</Button>
<Button variant="contained" disabled={pristine || submitting} onClick={reset}>
Clear Values
</Button>
</FormWrapper>
</Wrapper>
);
}
}
MainForm = reduxForm({
form: 'main'
})(MainForm);
export default MainForm;
类MainForm扩展组件{
状态={
提交:假
};
handleSubmit=数据=>{
this.setState({submit:true});
};
render(){
const{handleSubmit,pristine,submiting,reset}=this.props;
const{submit}=this.state;
如果(提交){
返回;
}
返回(
某个标题
//表单字段。。
提交
明确的价值观
);
}
}
MainForm=reduxForm({
表格:'主要'
})(主表格);
导出默认主窗体;
Iconsole.log
检查道具的值。它被炒了两次。第一次道具包含我希望在props.formData.main.values
下包含的表单值。因此,我假设MapStateTrops工作正常。但是,console.log
第二次被激发,并且props.formData
是一个空对象。我还使用了ReduxChrome扩展,我可以清楚地看到,表单提交后,存储中的数据将被删除
有人能向我解释一下这种行为吗?我怎样才能纠正它?谢谢。您没有在handler中“消费”提交的数据(在redux存储中保存数据的调度操作?)
可能由于某些原因,表单数据在重定向后被清除,例如重置状态、在下一页/url上不保存新表单的旧数据等。我已将其修复。Redux表单的默认行为是在卸载表单后丢弃表单数据。要防止这种默认行为,必须将
destroonunmount
设置为false
,如下所示:
MainForm=reduxForm({
表格:'主要',
destroyOnUnmount:false//默认值为true
})(主表格)代码>
我希望这能帮助有同样问题的人。使用结果的组件在哪里?为什么要发射两次,这两次之间有什么区别?我添加了App.jsx。在表单提交后,我只需重定向到结果
。显示主表单组件的提交/重定向部分在那里。。。