antd select组件相关——传值是数字、显示是文字、下拉框设置了value导致placeholder不显示等问题(较基础)

antd select组件相关——传值是数字、显示是文字、下拉框设置了value导致placeholder不显示等问题(较基础)

首先看要求:
在这里插入图片描述

有placeholder, 显示四个选项,选择一个选项时,传给后端的是数字类型。

数据是下面的结构:

teamOptions = [
        {
            label: "0-10人",
            value: 1
        },
        {
            label: "10-50人",
            value: 2
        },
        {
            label: "50-100人",
            value: 3
        },
        {
            label: "100人以上",
            value: 4
        }
    ];

------------------------------------------------------ 开始处理 -------------------------------------------------------

state中使用两个值来共同处理:

state = {
        	scale: "",//表示要显示的文字
        	scale_key: 0,//表示要传值的数字
        };

结构:

<Select
       defaultValue=""
       value={this.state.scale}//显示在select框上的值
       placeholder="选择人数范围"
       onChange={this.handleScaleChange}>
       {this.teamOptions.map(item => {//渲染4个选项
             return (
               <Select.Option value={item.label} key={item.value}>
                {item.label}//option上显示的 是teamOptions每一项的label
               </Select.Option>
             );
      })}
</Select>

onChange事件:

 handleScaleChange = (label: any, value: any) => {
        console.log("label:",label,"value:",value)
        this.setState({ scale: label, scale_key: value.key });
    };

当选择一个选项,触发onChange事件,可以看到上面打印的结果是:
在这里插入图片描述
所以可以知道
label就是我们要显示在框上的,即 this.state.scale ——设置scale:label
value是一个对象,里面有个key是”3“,这个可以转成数字传给后端。即设置scale_key:value.key

如果数据结构不同,可以自己试着打印一下,看看自己需要展示的和传值的分别是哪个。

最后还有个问题,就是:由于下拉框设置了value,导致placeholder不显示的问题

解决方法是:

在一切操作之前,先设置value为undefined,不知道有没有什么后患,目前我是这么解决的,暂时没有什么问题,欢迎指正。

我这里在 componentDidMount函数 里设置的:

componentDidMount() {
        this.setState({ scale: undefined });//因为value是绑定了this.state.scale的
    }

以上,问题都已解决。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值