React实战案例:操作数据将其应用到antd的Cascader组件中并通过Cascader组件选项切换日历数据
· 阅读需 3 分钟
一、需求
将获得的数据转换为antd中Cascader组件的option选项数据,然后再通过Cascader组件某一选项过滤日历的传入数据,在日历上显示。
二、思路
我们先来看看获得的原始数据,calendarEvents是包含着对象的数组类型:
[{
"id": "11ec-b68b-1df198ede54e",
"start": "2022-03-09T05:00:00.000Z",
"end": "2022-03-10T04:59:59.999Z",
"visible_title": null,
"status": "not_started",
"notes": null,
"site_links": [],
"cycle": {
"id": "afb444a0-b68b-1df198ede54e",
"name": "1941",
"__typename": "Cycle"
},
"task_type": {
"id": "ad3f075b-960f789-f74a7e816e7e",
"name": "Scouting B6",
"__typename": "TaskType"
},
"schedule_events": [],
"__typename": "CycleEvent",
"title": "Scouting B6 - 1941",
"allDay": true
},
...
]
而antd的Cascader组件需要的选项Option数据格式是一个有特定键值的数组:
const options = [
{
value: 'zhejiang',
label: 'Zhejiang',
children: [
{
value: 'hangzhou',
label: 'Hangzhou',
children: [
{
value: 'xihu',
label: 'West Lake',
},
],
},
],
},
{
value: 'jiangsu',
label: 'Jiangsu',
children: [
{
value: 'nanjing',
label: 'Nanjing',
children: [
{
value: 'zhonghuamen',
label: 'Zhong Hua Men',
},
],
},
],
},
];
根据需求我们分为两步:
第一步: 我们需要把calendarEvents中键值为"__typename"的值取出,包装成Option数据格式,附上新的键值,传给Cascader组件。
第二步: 获取Cascader组件选择的值,使用它对calendarEvents原始数据进行过滤,获取新的数组,传递给日历组件。当然,此时我们需要声明一个新的组件状态。
三、涉及到的技术
- lodash中的
_.filter、_.uniqBy、_.orderBy、_.map方法 - react-big-calendar库的使用