antd setFieldsValue警告问题 Cannot use `setFieldsValue` until you use `getFieldDecorator` or

3 篇文章 0 订阅

antd 使用form组件 setFieldsValue警告问题

原文警告:

Cannot use setFieldsValue until you use getFieldDecorator or getFieldProps to register it

大概意思就是:

在使用“getFieldDecorator”或“getFieldProps”注册之前,不能使用“setFieldsValue”

官网上的解释是这样的的

注意:使用 getFieldsValue getFieldValue setFieldsValue 等时,应确保对应的 field 已经用 getFieldDecorator 注册过了
看了半天也没看懂 百度了一下,this.props.form.form.setFieldsValue 传值的时候只能是form中用到的参数(即是getFieldDecorator方法中的field)没有的field一律不允许多传,否则就会报错
也就是说我们使用setFildsValue 设置value了值 但没有使用

实际场景

由父级页面传值过来
    componentWillReceiveProps = (next) => {
        // console.log(next)
        // console.log(this.props.Type)
        if (this.props.ProductRecipientApply !== next.ProductRecipientApply) {
                this.props.form.setFieldsValue({
                    SaleContractNo: next.ProductRecipientApply.SaleContractNo,
                    IsLetterAuthorization: next.ProductRecipientApply.IsLetterAuthorization,
                    AppEndTime: next.ProductRecipientApply.AppEndTime,
                    InnerOrderNo: next.ProductRecipientApply.InnerOrderNo,
                })
        }
    }
render使用
    render() {
        const { form: { getFieldDecorator }, Type, ProductRecipientApply, ProductSubmitCommitment, LogList } = this.props;
        const { IsInnerSettleCheckbox, BoolArr, isSettle, isSell, CheckboxProductRecipientApply, DateCreated } = this.state;
        console.log(ProductRecipientApply)
        return (
            <Row className="ProjectInformationForm_body">
                {Type === "LookAt" || Type === "Approval" ?
                    <Form layout='inline' className="ShowInfor">
                        <Col span={6}><Form.Item
                            label="对外销售">{ProductRecipientApply.IsOutsideSale ? '是' : '否'}</Form.Item></Col>
                        <Col span={6}><Form.Item
                            label="销售合同编号">{ProductRecipientApply ? ProductRecipientApply.SaleContractNo : ''}</Form.Item></Col>
                        <Col span={6}><Form.Item
                            label="出库时间">{DateCreated ? DateCreated : ''}</Form.Item></Col>
                        <Col span={6}><Form.Item
                            label="需要正版授权书">{ProductRecipientApply.IsLetterAuthorization === "1" ? '是' : '否'}</Form.Item></Col>
                        <Col span={6}><Form.Item
                            label="内部结算">{ProductRecipientApply.IsInnerSettle ? '是' : '否'}</Form.Item></Col>
                        <Col span={6}><Form.Item
                            label="内部订单编号">{ProductRecipientApply ? ProductRecipientApply.InnerOrderNo : ''}</Form.Item></Col>

                        <Col span={12}>
                            <Form.Item label="相关附件" >
                                {
                                    ProductSubmitCommitment && ProductSubmitCommitment.map((value, index) => {
                                        return <a
                                            style={{ marginRight: 10 }}
                                            target="_blank"
                                            key={index}
                                            href={value.DownloadUrl}>{index + 1}{value.FileName}</a>
                                    })
                                }
                            </Form.Item>
                        </Col>
                    </Form>
                    : <Form layout='inline' className="ShowInput">{/* 编辑 */}
                        <Col span={3}>
                            <Form.Item label="对外销售">
                                {getFieldDecorator('IsOutsideSale', { rules: [{ required: false }] })(
                                    <Checkbox checked={CheckboxProductRecipientApply} onChange={(e) => this.CheckboxChangeTwo(e)} />
                                )}
                            </Form.Item>
                        </Col>
                        <Col span={9}>
                            <Form.Item label="销售合同编号">
                                {getFieldDecorator('SaleContractNo', { rules: [{ required: isSell ? true : false }] })(
                                    <Input placeholder="请输入" onChange={(e) => this.SaleContractNo(e)} />
                                )}
                            </Form.Item>
                        </Col>
                        <Col span={6}>
                            <Form.Item label="出库时间">
                                {getFieldDecorator('AppEndTime', { rules: [{ required: false }] })(

                                    <Input disabled />
                                )}
                            </Form.Item>
                        </Col>
                        <Col span={6}>
                            <Form.Item label="需要正版授权书">
                                {getFieldDecorator('IsLetterAuthorization', { rules: [{ required: false }] })(
                                    <Select style={{ color: '#333' }} allowClear placeholder="请选择">
                                        {
                                            !BoolArr ? '' : BoolArr.map((item, index) =>
                                                (<Option key={index} value={item.DictCode}>{item.DictName}</Option>)
                                            )
                                        }
                                    </Select>
                                )}
                            </Form.Item>
                        </Col>
                        <Col span={3}>
                            <Form.Item label="内部结算">
                                {getFieldDecorator('IsInnerSettle', { rules: [{ required: false }] })(
                                    <Checkbox checked={IsInnerSettleCheckbox} onChange={(e) => this.CheckboxChangeOne(e)} />
                                )}
                            </Form.Item>
                        </Col>

                        <Col span={9}>
                            <Form.Item label="内部订单编号">
                                {getFieldDecorator('InnerOrderNo', {
                                    rules: [{ required: isSettle ? true : false }],
                                })(
                                    <Input placeholder="请输入" onChange={(e) => this.InnerOrderNo(e)} />
                                )}
                            </Form.Item>
                        </Col>
                        <Col span={24}>
                            <Form.Item label="相关附件">
                                {ProductSubmitCommitment ?
                                    (getFieldDecorator('ProductSubmitCommitment', { rules: [{ required: false }] })(
                                        <UploadFile
                                            action={allUrl.common.uploadFile}
                                            cb={this.props.getProductSubmitCommitment}
                                            data={{ BusinessType: 'DPM_ProductSubmitCommitment' }}
                                            fileList={ProductSubmitCommitment}
                                            multiple={true}
                                            disabled={false}
                                        ></UploadFile>
                                    )) : ''
                                }
                            </Form.Item>
                        </Col>
                    </Form>
                }
            </Row>
        )
    }
上述代码可知 当Type等于 LookAt时 我们并没有使用到setFieldsValue设置的数据 所有当页面为查看状态时 我们不使用setFieldsValue 设置数据 代码加判断即可
        if (this.props.ProductRecipientApply !== next.ProductRecipientApply) {
            if (this.props.Type !== "LookAt") { // 设置setFieldsValue 需要使用getFieldDecorator接收  
                this.props.form.setFieldsValue({
                    SaleContractNo: next.ProductRecipientApply.SaleContractNo,
                    IsLetterAuthorization: next.ProductRecipientApply.IsLetterAuthorization,
                    AppEndTime: next.ProductRecipientApply.AppEndTime,
                    InnerOrderNo: next.ProductRecipientApply.InnerOrderNo,
                })
            }
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jason–json

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值