爬坑!!antd中select组件的defaultValue取不到数据问题

爬坑!!antd中select组件的defaultValue相关问题

需求一:是这样的,想要在下拉菜单的框里首先显示一个默认值,默认下拉菜单的第一项,而不是placeholder。

但是由于下拉菜单是请求回来的数据,因为你不能在页面渲染的时候就直接展示出数据,所以有了一个解决办法!使用key!!!让key值等于defaultValue的值。

const [activites, setActivites] = useState([]);
...
useEffect(() => {
	setActivites([
            {
                title: '活动53',
                value: 'ac53',
            },
            {
                title: '活动75',
                value: 'ac75',
            },
            {
                title: '活动1',
                value: 'ac1',
            },
        ]);
},[]);
return (
	<Select
		defaultValue={activites[0]?.value}
	    key={activites[0]?.value}
	    onChange={handleChange}
	    style={{width: 200}}
	>
	    {activites && activites.map(item => {
	    	return (<Option key={item.value} value={item.value}>{item.title}</Option>);})
	    }
	</Select>
);

此时就可以框里面就可以显示默认值了!
在这里插入图片描述
但是,我又遇到了一个新的问题,就是在我想取这个默认值,拿着默认值去请求数据的时候,取不到值,原因就是我们使用的useState是异步的,我们在setActivites之后打印activities得到的是旧制,也就是初始的[]。

useEffect(() => {
	setActivites([
            {
                title: '活动53',
                value: 'ac53',
            },
            {
                title: '活动75',
                value: 'ac75',
            },
            {
                title: '活动1',
                value: 'ac1',
            },
        ]);
        console.log(activities, '=============activities');  // []
},[]);

但是我就想拿到初始值怎么办??因此就来了需求二。

需求二:拿到下拉菜单的默认值去请求数据。

对于这个问题,我也找到了解决办法,就是使用ref,这应该是最简单也是最好理解的解决办法啦!

const activitesRef = useRef([]);
...
useEffect(() => {
	activitesRef.current = [
            {
                title: '活动53',
                value: 'ac53',
            },
            {
                title: '活动75',
                value: 'ac75',
            },
            {
                title: '活动1',
                value: 'ac1',
            },
        ];
},[]);
return (
	<Select
		defaultValue={activitesRef.current[0]?.value}
	    key={activitesRef.current[0]?.value}
	    onChange={handleChange}
	    style={{width: 200}}
	>
	    {activitesRef.current && activitesRef.current.map(item => {
	    	return (<Option key={item.value} value={item.value}>{item.title}</Option>);})
	    }
	</Select>
);

get到啦~~
在这里插入图片描述

可以使用antdSelect组件和Table组件来实现这个功能。具体步骤如下: 1. 在Table组件添加一个列,该列包含Select组件。可以使用Table组件的render属性来渲染该列。 2. 在Select组件设置数据源,可以通过props传递数据源,也可以在组件内部设置。数据源通常是一个数组,每个数组元素都代表一个选项。 3. 在Select组件设置选项。可以使用props传递选项,也可以在组件内部设置。选项通常是一个或者一个数组,表示当前选的选项。 4. 在Select组件设置事件处理函数。可以使用props传递事件处理函数,也可以在组件内部设置。事件处理函数通常是一个回调函数,当用户选某个选项时会被调用。 示例代码如下: ```jsx import { Table, Select } from 'antd'; const { Option } = Select; const dataSource = [ { key: '1', name: 'John Brown', age: 32, address: 'New York No. 1 Lake Park', }, { key: '2', name: 'Jim Green', age: 42, address: 'London No. 1 Lake Park', }, { key: '3', name: 'Joe Black', age: 32, address: 'Sidney No. 1 Lake Park', }, ]; const columns = [ { title: 'Name', dataIndex: 'name', key: 'name', }, { title: 'Age', dataIndex: 'age', key: 'age', }, { title: 'Address', dataIndex: 'address', key: 'address', }, { title: 'Action', key: 'action', render: (text, record) => ( <Select defaultValue="1" style={{ width: 120 }}> <Option value="1">Option 1</Option> <Option value="2">Option 2</Option> <Option value="3">Option 3</Option> </Select> ), }, ]; const App = () => { return ( <Table dataSource={dataSource} columns={columns} /> ); }; export default App; ``` 在上述代码,我们在Table组件的columns属性添加了一个名为Action的列,该列包含了一个Select组件。我们在Select组件设置了数据源和事件处理函数,用户选择某个选项时会触发onChange事件,我们在事件处理函数可以获取到用户选择的选项。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秃八哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值