当前位置: 首页 > news >正文

三明网站优化2021免费正能量网站

三明网站优化,2021免费正能量网站,网络营销策略的概念,网站建设四段合一前言表单中添加一个地区选择功能&#xff0c;要求支持增删改查功能。Cascader 使用Cascader组件动态加载地区选项。使用 loadData 实现动态加载选项&#xff0c;&#xff08;loadData 与 showSearch 无法一起使用&#xff09;。 这里使用了Form.Item组件。 <Form.Itemlabel{…

前言

表单中添加一个地区选择功能,要求支持增删改查功能。

Cascader

使用Cascader组件动态加载地区选项。使用 loadData 实现动态加载选项,(loadData 与 showSearch 无法一起使用)。
这里使用了Form.Item组件。

<Form.Itemlabel={'地区'}name={'region'}rules={[{required: true,},]}
><Cascaderoptions={regionOptions}loadData={loadRegionData}changeOnSelect/>
</Form.Item>

这里的options在每次选择后,通过loadData加载新的选项。
Cascader组件的选项每次存储的值为option中的value,展示的值为label,并通过isLeaf判断是否有子菜单

{value: 'zhejiang',label: 'Zhejiang',isLeaf: false
}

新增

点击新增按钮时,会获取地区接口,并根据用户选择加载地区。
地区在数据库中是根据id和pid进行关联的。如果pid是0,代表是1级地区;pid是1,代表当前地区是id为1的地区的子地区;同理,pid是2,代表当前地区是id为2的地区的子地区。
在这里插入图片描述

const [regionOptions, setRegionOptions] = useState([]);// 获取初始化的地区
// 这个接口参数为空时会返回地区的一级菜单,不为空时传递pid,返回该pid下面的子菜单
const getRegionList = async params => {try {const res = await selectCityInfoApi(params)const newRes = res.map(item => {return {...item,  //返回的值是例如{value: value, label: label, level: 1}isLeaf: item.level === '3',  //判断level, 如果是三级菜单就没有子菜单}})if (!params) {setRegionOptions(newRes);}return newRes;} catch (error) {console.log(error);}
}useEffect(() => {if (isAdd === false && editId) {// 编辑} else {// 新增getRegionList();   // 接口参数为空时会返回地区的一级菜单}
}, [isAdd]);const loadRegionData = (selectedOptions) => {const targetOption = selectedOptions[selectedOptions.length - 1];  // 取选择的最后一个值getRegionList({ pid: targetOption.value }).then(res => {  // 用pid去调用接口targetOption.children = res;  //  把返回的值放到children中setRegionOptions([...regionOptions]);  // 更新regionOptions})
}

回显

表单保存之后,存储的值是选择的地区的id,这就有一个问题,回显时拿到的也是这个id。例如如果选择:[北京、北京、东城区],那么存储的时候只会存东城的id:3,但是回显需要他们的id:[1, 2, 3] 才能回显地区,并且在用户点击时展开时还需要相关的option数据。

useEffect(() => {if (isAdd === false && editId) {// 编辑setLoading(true);getGroupResourceById(editId)  // 获取当前id的数据.then(data => {  // data中有region的id和PidsetLoading(false);getRegionList();getRegionDetails(data.regionPid, [String(data.regionPid), String(data.region)]).then((res) => {form.setFieldsValue({ ...data, region: res });buildRegionSelectOptions(res).then(selectRegions => {setRegionOptions(selectRegions);})});}).catch(err => {setLoading(false);});} else {// 新增getRegionList();}
}, [isAdd]);const getRegionDetails = async (regionId, regions = []) => {  // 收集region的idtry {const res = await selectCityInfo({ id: regionId })  // 这个接口入参是region的id,返回当前id的具体信息if (!!res.length && res[0]?.pid && res[0].pid !== 0) {regions.unshift(String(res[0].pid));}return regions;} catch (error) {console.error('获取地区列表失败:', error);return regions;}
};// 通过一级菜单的pid去递归调用,获取regionOption
const buildRegionSelectOptions = async (regionIds) => {const result = [...regionOptions];if (!regionIds || regionIds.length === 0) return result;const processRegion = async (ids, parentNode = null) => {if (!ids || ids.length === 0) return;const [currentId, ...restIds] = ids;try {const regionData = await getRegionList({ pid: currentId });const currentNode = regionData.map(item => ({...item, isLeaf: item.level === '3'}));parentNode.children = currentNode;if (restIds.length > 0) {const currentIndex = parentNode.children.findIndex(item => item.value === restIds[0]);await processRegion(restIds, parentNode.children[currentIndex]);}} catch (error) {console.error(`获取地区 ${currentId} 失败:`, error);}};let currentRegion = regionOptions.find(item => item.value === regionIds[0]);await processRegion(regionIds, currentRegion);return result;
};

总结

  1. 新增时通过pid依次获取下一级菜单
  2. 回显时通过递归获取菜单
  3. 后端还是要好好设计一下,这太麻烦了~
http://www.dtcms.com/a/488926.html

相关文章:

  • 东营市河口区建设局网站wordpress更改title
  • 网站建设备案是什么成都网站seo报价
  • 抚州城乡建设厅网站临城网站建设
  • 安徽禹尧工程建设有限公司网站上海网站建设公司电话
  • 专业营销的网站建设公司排名安网多少钱
  • 海东商城网站建设零食店网站建设计划书
  • 做网站能挣钱不网络营销外包专家
  • 顺德新网站制作深圳专业建站平台
  • 海南做网站的公司有哪些网络公司seo教程
  • 网站网页设计公司织梦网站如何更新系统
  • 海南企业网站建设山东监理工程师考试最新消息
  • 个人如何建设网站苏州三大建筑设计院
  • 上海电子通科技网站建设网站如何提高权重
  • 设计手机商城网站建设做雨棚的网站
  • 公司网站怎么注册腾讯cdn wordpress插件
  • 做一个医院网站多少钱做ui的网站
  • 排版设计云南seo整站优化报价
  • windows把源码还有环境放进docker
  • 南昌网站设计有限公司网站设计排版怎么做
  • o2o网站建设如何网页升级访问更新中
  • 网站建设以哪种销售方式好课题网站建设验收总结报告
  • wordpress建站显示网站图标分析一个网页设计
  • 怎样给网站做app青岛不错的网站公司
  • 宣传推广方式优化大师 win10下载
  • 做网站划算还是做app划算wordpress会员可见主题
  • 徐州人才网官方网站phpcms调用网站名称
  • 网站开发 简历杭州网站建设索q479185700
  • 电商网站建设哪家公司好曹县网站建设公司
  • 嘉兴网站平台建设产地证哪个网站做
  • 湛江网站建设维护西安专业房产网站建设