一、Form操作

  1. 使用mapPropsToFields和onFieldsChange对form数据进行编辑回显操作
  1. //父组件
  2. constructor(props) {
  3. super();
  4. this.state = {
  5. aInfo: props.section.aInfo, //设置state
  6. };
  7. }
  8. componentWillReceiveProps(nextProps) { //componentWillReceiveProps 在组件接收到一个新的 prop (更新后)时被调用。这个方法在初始化render时不会被调用
  9. this.setState({
  10. aInfo: nextProps.section.aInfo, //给state设置最新的值
  11. })
  12. }
  13. //将Form变化的Form数据进行state赋值【双向绑定】
  14. handleFormChange = (changedFields) => {
  15. this.state.aInfo[changedFields.name] = changedFields.value;
  16. this.setState(({ aInfo }) => ({
  17. aInfo: { ...aInfo, ...changedFields },
  18. }));
  19. }
  20. //在render里面进行解构
  21. const { aInfo } = this.state;
  22. //给Form组件传值
  23. <SectionForm
  24. aInfo={aInfo}
  25. onChange={this.handleFormChange} //监听Form数据变化
  26. />
  27. //子组件【Form组件】
  28. Form.create({
  29. name:'sectionForm',
  30. onFieldsChange(props, changedFields) {
  31. //监听Form的值并传值给父组件的onChange
  32. Object.keys(changedFields).forEach(key=>{
  33. props.onChange(changedFields[key]);
  34. })
  35. },
  36. mapPropsToFields(props) {
  37. const { aInfo } = props; //通过父组件传递过来的props获取到值
  38. const dataToForm = (obj)=>{
  39. let formData = {}
  40. for(let [key,value] of Object.entries(obj)){
  41. formData[key] = Form.createFormField({value}) //使用Form.createFormField进行标记【必须】,进行数据回显
  42. }
  43. return formData;
  44. }
  45. return dataToForm(aInfo);
  46. }
  47. })(SectionForm);
  1. 监听Form值并扔给reducers
  1. //Form组件
  2. componentWillReceiveProps(nextProps) {
  3. this.setState({
  4. aInfo: nextProps.section.aInfo, //监听props更新设置state
  5. });
  6. }
  7. //实时监听Form变化
  8. onChange = () => {
  9. const { dispatch } = this.props;
  10. const { aInfo: formData } = this.state;
  11. dispatch({
  12. type:'section/formData', //扔给reducers
  13. payload:{
  14. formData
  15. }
  16. })
  17. }
  18. //绑定监听事件
  19. <Form onChange={this.onChange}></Form>