React中父组件嵌套子组件获取参数

16 篇文章 2 订阅
12 篇文章 0 订阅

需求:根据报文类型的不同,每种报文类型的字段也有所不同。通过后端返回的报文字段的字符串,前端将字符串转为对象,根据后端返回的对象,展示当前报文的页面字段。

 

 实现思路:根据需求将建立三个组件,域组件主要用来展示字段。块组件用来展示可增加和删除的块,块组件里面通过域组件来进行展示。最终在模板组件,对后端返回的所有的模板字段进行判断,遍历模板字段,如果后端返回的字段类型是个域就直接展示域组件,如果返回的字段类型是个块就展示块组件。在模板组件将所有域和块的字段值进行集中,从而获取所有的报文字段数据,对数据进行处理之后提交到后端。

数据类型:

难点:随着块增加多个相同的域之后,获取这些不同的域的数据,采用给不同的表单字段的key来进行实现,这样多个相同的域因为key的不同,获取的不同域的数据也不会有所冲突。

 getPageItem = (itemTitle, itemValue, index) => {
    const { form } = this.props;
    const { getFieldDecorator } = form;
    const pageItem = [];
    const childrenValue = _.get(itemValue, 'value');
    if (_.isArray(childrenValue)) {
      _.each(childrenValue, item => {
        const labelValue = _.get(item, 'label') || _.get(item, 'name') || '';
        const values = _.get(item, 'value');
        const value = this.getDefaultValue(labelValue, values);
        // key通过拼接不同的字段名,标签,块的数组排序来进行区分
        const key = `${itemTitle}-${item.name}-${item.label}-${index}`;
        const colItem = (
          <FormItem label={labelValue} className={item.must ? styles.MustItem : ''}>
            {getFieldDecorator(key, {
              initialValue: value,
              rules: item.isNull === 'N' ? [{ required: true, message: '请输入必填信息!' }] : [],
            })(this.getFormItem(item))}
          </FormItem>
        );
        pageItem.push(colItem);
      });
    } else {
      const key = `${itemTitle}-${index}`;
      const colItem = (
        <FormItem label="">
          {getFieldDecorator(key, {
            initialValue: _.get(itemValue, 'value') || '',
          })(this.getFormItem(itemValue))}
        </FormItem>
      );
      pageItem.push(colItem);
    }
    return pageItem;
  };

字段获取的传参

最终传参

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值