antdCascader(或TreeSelec)仅根据最后一级value回显完整路径
Cascader(或TreeSelect树选择器 )往往会在项目中用在分类管理这一需求,可以很好的展示分类的层级结构,有时可能因为分类会存在改变层级(如由四级分类变成了二级分类)的情况,后端接口会要求在存储分类数据的时候,仅传递 最后一级 的信息。 例子
举个antd官网的例子: import { Cascader } from "antd"; const options = [ { value: "zhejiang", label: "Zhejiang", children: [ { value: "hangzhou", label: "Hangzhou", children: [ { value: "xihu", label: "West Lake", }, ], }, ], }, { value: "jiangsu", label: "Jiangsu", disabled: true, children: [ { value: "nanjing", label: "Nanjing", children: [ { value: "zhonghuamen", label: "Zhong Hua Men", }, ], }, ], }, ]; function onChange(value) { console.log(value); } ReactDOM.render(, mountNode);
在选中 Zhejiang / Hangzhou / Wes tLake 时,对应的value是 ["zhejiang", "hangzhou", "xihu"] ,后端可能只需要你传递xihu 即可,而非数组形式的网站路径信息。
这时前端在回显的时候会出现一个问题,无法根据 xihu 完整的回显之前的路径名Zhejiang / Hangzhou / Wes tLake了。如何收集完整的节点路径信息
我们可以借助官网在TreeSelect给的提示 onChange时如何获得父节点信息?
其思路就是将节点value作为对象 valueMap 的key,遍历节点的子节点children(如果有的话),通过parent该节点和其子节点链接起来。后续就可以用getPath 方法根据value 在valueMap 通过parent 一层一层找到对应的父节点信息了。const valueMap = {}; function loops(list, parent) { return (list || []).map(({ children, value, label }) => { const node = (valueMap[value] = { parent, data: { label, value } }); node.children = loops(children, node); return node; }); } loops(treeData); function getPath(value, prop) { const path = []; let current = valueMap[value]; while (current) { path.unshift(current.data[prop]); current = current.parent; } return path; }
简单改造下,同时 valueMap 同时收集下lable 信息,同时getPath 支持返回指定prop 的信息,让回显更加灵活。如何使用getPath完成数据方法一:我们可以直接通过ref暴露出去
useImperativeHandle(ref, () => ({ valueMap, getPath, }))
但是这样在部分使用起来不合适,比如列表展示时,并且这样也会存在因为列表数据渲染时`Cascader`的`valueMap`还未收集好,而`getPath`获取结果为空的情况。
我们可以试试方法二 方法二:支持自定义renderfunction CategorySelect(props, ref) { const [value, setValue] = useState([]); const [valueMap, setValueMap] = useState({}); // 根据value回显对应的label const fullLabelPath = useMemo(() => { if (!props.displayLabel) { return; } return getPath(props.value, props.displayLabel); }, [props.displayLabel, props.value, props.data, valueMap]); ... return { (props.fullLabelRender) ? props.fullLabelRender(fullLabelPath) : ( ) } }
我们将全路径的渲染能力开放通过`props.fullLabelRender`
使用可以这样使用 fullLabelRender={(fullLabelPath) => ({ fullLabelPath.join(" / ") })}
因为 fullLabelPath 是useMemo 的返回值,valueMap 是useState 的返回值,这样我们也不必担心列表数据渲染时Cascader的valueMap 还未收集好的情况了,待valueMap 收集完毕后,自会重新渲染的。
同样的思路也可以用在TreeSelect树选择器,我就不具体写了哦。
缅北汉军英雄果敢同盟军真的能光复果敢,活抓白所成吗?最近,缅甸关于缅北的小道消息特别多,特别是果敢地区。最近可说是风云变幻,狼烟四起。彭德仁的果敢同盟军和白主席组建的自卫军缅军大打出手。现在的果敢局势是国人很关心的话题。毕竟,果敢人
被埋没的宁波市花,重新评市花,什么花最合适?浙江省宁波市,早期名叫宁波府庆元府明州府等名称,1927年设立宁波市,但是到了1931年又被撤销划属鄞县,直到1949年浙东解放后,正式设立宁波市。几乎每个城市都有市花市树,宁波市
黄巢的功与过黄巢留在世间最后的话是想我自起兵以来,转战千里,战无不胜。没想到,却落得今天这种下场。都是天意呀!黄巢是谁?听海云频道为你娓娓道来。黄巢(公元849884),曹州冤句人(今山东菏泽
耶稣是真实的历史人物吗?历史学家这样看他是世界上最有影响力的人物之一,他的名字被无数信徒崇敬和赞美,他的教义和行为被记录在圣经中,他的死和复活被视为人类救赎的奇迹。他就是耶稣基督,基督教的创始人和核心。但是,耶稣真的存
五个因果轮回的历史故事,令人震惊,耐人寻味历史开讲很多历史的情节总是惊人的相似,不断重演,因果轮回,更加耐人寻味,似乎冥冥之中,自有定律。今天小编分享五个历史上因果轮回的故事。故事一西楚霸王项羽楚虽三户,亡秦必楚。果然秦始
去这里看桃花,周五起要预约!流程来了运河桃花节马上开幕啦!朵朵桃花枝头绽放让我们共赴一场桃花之约津云此前已经报道了相关游园提示包括开园时间公园出入口交通出行方案等天津这里,桃花和园都开了!运河桃花节攻略请查收此外后台
上海樱花节开幕在即,顾村公园万株樱花竞放,如何应对大客流?警方在园内巡逻。本文图片澎湃新闻记者巩汉语摄申城三月,春暖花开。3月15日,上海樱花节将正式拉开帷幕。上海最负盛名的赏樱胜地顾村公园内的早樱已竞相绽放,中晚樱品种也蓄势待发。据了解
加拿大废除奴隶制逐步进行,黑人社区开始发展,怎么解决历史问题文狂人日际编辑狂人日际前言许多历史学家认为,奴隶制是人类历史上最残酷和不人道的制度之一。奴隶制度的废除是人类文明史上最伟大的进步之一。奴隶制是一种残酷不人道和不公正的制度,它带来了
安排!正定春季文化活动来啦逛文化博览会品海棠诗会看古装秀赏红楼演出为促进文旅融合正定县精心策划了一系列丰富多彩的文化活动小编为大家准备好了清单赶紧查收吧01hr彩色周末时间每周末18302000地点阳和楼南
这3个县离开漳州后咋样了?一个改名,一个不复存在,还有一个呢对于很多外地游客来说,提到漳州这个城市,很多人并没有什么印象。漳州位于福建省,是一个临海城市。特别是从中国古代开始,这里的经济发展非常繁荣。据了解,这里曾在1万多年之前就已经有部落
元朝灭亡前夜,统治者内部激烈的内讧就在朱元璋一个一个的消灭南方的起义军或以起义军起家的军阀之时,元廷内部确是乌烟瘴气。1355年,脱脱被害死后,元顺帝便开始日怠于政务,贪玩享乐。而在脱脱后,元顺帝任命的丞相都是碌碌
我的产房故事如果说怀孕是爱与责任的开始,那么生育就是爱与责任的落地。临近预产期,我曾无数次的在睡梦中想象着宝宝出生的那一幕也曾无数次的判定着他的出生方式。怀孕6个月距离预产期2天的7月28日,
25岁超杀女科洛莫瑞兹杂志写真,瘦下来的她美艳依旧据新浪电影报道,近日超杀女科洛莫瑞兹登上杂志写真,照片中25岁的莫瑞兹身穿秋季款皮衣,十分帅气。科洛莫瑞兹是1997年出生的美国影视女演员童星。2005年参演个人首部电影旁观者的心
李念和袁泉同框,终于见识了小女人和大女主的气质差距有多大了头条创作挑战赛袁泉是娱乐圈气质女星的代表,虽然长相不是倾国倾城的类型,但她独有的清冷优雅高级的气质让人过目不忘,而且随着年龄的增大,袁泉也是越来越有韵味。除了自带的高级气质之外,袁
大衣下面尽量少搭配裤子,今年流行这样穿,优雅又高级在天气逐渐变凉的过渡季节,要说什么样的单品最受女性的欢迎,那么大衣一定名列前茅,它是属于一款可以从秋天穿到冬天的服装,能够很好的穿出女性的高级品味。建议大家穿大衣的时候尽量少搭配裤
一图回顾党的历次代表大会党的二十大即将隆重开幕。此次会议是在全党全国各族人民迈上全面建设社会主义现代化国家新征程向第二个百年奋斗目标进军的关键时刻召开的一次十分重要的大会。党建网微平台依据中国共产党一百年
太空授课播撒科学的种子10月12日,天宫课堂第三课在中国空间站开讲。图为学生在河南省科技馆收看天宫课堂第三课。新华社记者徐嘉懿摄10月12日下午,天宫课堂第三课在中国空间站开讲。神舟十四号飞行乘组航天员
道天录轮回神殿棋局角色抽取本文首发道天录攻略组公众号,未经授权禁止抄袭文章转载至其它平台。道天录是一款国风修仙主题的模拟经营卡牌游戏。在这款游戏中玩家并不是一个人在孤军奋战,玩家还可以在游戏中自立山门,开宗
MST(MasterToken)启动全球扩张计划和推出DAO治理机制近期,MST(MasterToken)宣布将启动全球扩张计划,并推出与更多主流社区的战略合作。同时,MST推出MS社区,采用DAO治理机制,吸引更多的社区加入打造全球最强社区联盟,
已经办理了商业贷款,如何转成公积金贷款?房贷压力大,怎么样才能减轻还款压力呢?符合条件的购房者可以申请商转公来降低压力,公积金利率要比商业贷款低很多转贷方式有两种一先还后贷,顾名思义,先要还掉原来的商业贷款,再办理公积金
宁德时代在贵州成立新公司经营范围含新兴能源技术研发新京报贝壳财经讯(记者王琳琳)企查查数据显示,10月12日,时代绿色能源有限公司新增投资企业开阳润时新能源有限公司,投资比例100。按照股权信息显示,时代绿色能源有限公司是宁德时代
住房公积金贷款利率下调,之前买房的也可以享受吗?随着中国人民银行下调首套个人住房公积金贷款利率之后,近日,杭州住房公积金管理中心也下调了首套个人住房公积金贷款利率。相关调整细节跟随了央行的步伐,9月30日,央行决定,自2022年