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

宣传类的网站有哪些内容百度电话号码查询平台

宣传类的网站有哪些内容,百度电话号码查询平台,绵阳网站建设绵阳,简述跨境电商网站的平台建设文章目录 一、Tree数据重置二、Tree拆分成二级数据1、过滤数据2、二级数据 Tree组件的数据处理往往需要使用递归,本文归纳一下常见的数据处理情景,持续更新; 一、Tree数据重置 递归的标志就是寻找子元素的集合字段,一般为children…

文章目录

  • 一、Tree数据重置
  • 二、Tree拆分成二级数据
    • 1、过滤数据
    • 2、二级数据

Tree组件的数据处理往往需要使用递归,本文归纳一下常见的数据处理情景,持续更新;

一、Tree数据重置

  • 递归的标志就是寻找子元素的集合字段,一般为children,将所有节点依次过滤,
  • 遍历过程类似于先序遍历,递归得到的返回值重新组成新的children数据,这个过程类似于后序遍历
  • 遍历过程主要是增加必要的属性比如value、key,还可以根据节点数据动态设置icon
  • 注意展开项expandedKeys的收集,根据数据自主控制
import { SmileOutlined } from "@ant-design/icons";
import { Button, Form, Tree } from "antd";
import React, { useMemo } from "react";
const treeDataTest = [{ name: "0", id: "0", children: [{ name: "1", id: "0-0" }] },{name: "1",id: "1",sub: [{name: "1-0",id: "1-0",children: [{ name: "1-0-0", id: "1-0-0" },{ name: "1-0-1", id: "1-0-1" }]},{name: "2-0",id: "2-0",sub: [{name: "2-0-0",id: "2-0-0",sub: [{ name: "2-0-0-0", id: "2-0-0-0", children: [{ name: "2-0-0-0-0", id: "2-0-0-0-0" }] }]}]}]}
];
export default function TreePage() {const [form] = Form.useForm();const [expandedKeys, setExpandedKeys] = React.useState([]);const labelWarpBtn = {offset: 6,span: 14};const onValuesChange = (changedValues, allValues) => {console.log("changedValues: ", changedValues);console.log("allValues: ", allValues);};// 转换每一个节点,只区分children、sub属性、icon属性const transformData = (data, expandedKeys) => {data.forEach((item) => {item.title = item.name;item.key = item.id;if (item.children) {expandedKeys.push(item.key);item.children = transformData(item.children, expandedKeys);} else if (item.sub) {item.children = transformData(item.sub, expandedKeys);} else {item.icon = <SmileOutlined />;}});return data;};// 单纯过滤数据添加属性const treeData = useMemo(() => {const expandedKeys = [];const data = transformData(treeDataTest, expandedKeys);setExpandedKeys(expandedKeys);return data;}, [treeDataTest]);return (<div><Form form={form} labelCol={{ span: 6 }} wrapperCol={{ span: 14 }} onValuesChange={onValuesChange}><Form.Item name="tree" label="tree">{/* fieldNames={{ title: "name", key: "id", children: "children" }} */}{/* 这里只是初步定义,只能扩充三个字段,想要更灵活的属性,在数据层修改就好了 */}{/* 一般处理数据后还要关注expandedKeys等属性 */}<Tree treeData={treeData} expandedKeys={expandedKeys} onExpand={setExpandedKeys} showIcon></Tree></Form.Item><Form.Item wrapperCol={labelWarpBtn}><Button type="primary" htmlType="submit" onClick={console.log(form.getFieldsValue())}>Submit</Button></Form.Item></Form></div>);
}

二、Tree拆分成二级数据

1、过滤数据

  • 过滤不存在有效数据的节点,假设num表示该节点下级存在的有效数据的数量,通过num可以进行空数据过滤
  • 递归中遇到报错可以使用debugger查看问题,调用次数太多使用console也无法定位
const treeDataTest = [{ name: "0", id: "0", children: [{ name: "1", id: "0-0" }] },{name: "1",id: "1",sub: [{name: "1-0",id: "1-0",children: [{ name: "1-0-0", id: "1-0-0" },{ name: "1-0-1", id: "1-0-1" }]},{name: "2-0",id: "2-0",sub: [{name: "2-0-0",id: "2-0-0",sub: [{ name: "2-0-0-0", id: "2-0-0-0", children: [{ name: "2-0-0-0-0", id: "2-0-0-0-0" }] }]}]}]}
];// 过滤数据,只展示存在有效数据的节点const filterData = (data) => {const filter = (arr) => {return arr.filter((item) => {if (item.num > 0) {// debugger;if (item.sub?.length > 0) {item.sub = filter(item.sub);}return true;}return false;});};return filter(JSON.parse(JSON.stringify(data)));};

2、二级数据

  • 当需要拆分成两级时,需要把中间层级省略,保留末端children数据(假设有效数据都保存在children中)
  • 设定目标数据的层级为两级,就可以遍历最外层,而内层递归,逐个往数组里添加末端children数据
import { SmileOutlined } from "@ant-design/icons";
import { Button, Form, Tree } from "antd";
import React, { useCallback, useMemo } from "react";
const treeDataTest = [{ name: "0", id: "0", num: 1, children: [{ name: "1", id: "0-0" }], sub: [] },{name: "1",id: "1",num: 3,sub: [{name: "1-0",id: "1-0",num: 2,children: [{ name: "1-0-0", id: "1-0-0" },{ name: "1-0-1", id: "1-0-1" }]},{name: "2-0",id: "2-0",num: 1,sub: [{name: "2-0-0",id: "2-0-0",num: 1,sub: [{ name: "2-0-0-0", id: "2-0-0-0", num: 1, children: [{ name: "2-0-0-0-0", id: "2-0-0-0-0" }] }]}]}]},{name: "2",id: "2",num: 0,sub: [{ name: "2-0", id: "2-0", num: 0, sub: [{ name: "2-0-0", id: "2-0-0", num: 0 }] }]}
];
export default function TreePage() {const [form] = Form.useForm();const [expandedKeys, setExpandedKeys] = React.useState([]);const labelWarpBtn = {offset: 6,span: 14};const onValuesChange = (changedValues, allValues) => {console.log("changedValues: ", changedValues);console.log("allValues: ", allValues);};// 转换为二级树结构,方便展示数据const transformChildrenOnly = (data) => {data.forEach((item) => {item.title = item.name;item.key = item.id;item.icon = <SmileOutlined />;});return data;};const transformChildren = (data, arr) => {data.forEach((item) => {// 这里递归的条件仅限于sub,因为他是叶子节点,不被需要// 如果有level层级,可以采取更灵活的条件去拆分数据if (item.children) {arr.push(...transformChildrenOnly(item.children));} else if (item.sub) {transformChildren(item.sub, arr);}});return data;};const transformDataToSecondTree = useCallback((data) => {const newData = [];const expandedKeys = [];data.forEach((item) => {const arr = [];item.title = item.name;item.key = item.id;expandedKeys.push(item.key);if (item.children) {// 如果第二层就是childrenarr.push(...transformChildrenOnly(item.children));} else if (item.sub) {// 如果第二层是sub属性,sub代表他是叶子节点,不是最终节点transformChildren(item.sub, arr);}newData.push({ ...item, children: arr });});setExpandedKeys(expandedKeys);return newData;}, []);// 过滤数据,只展示存在有效数据的节点const filterData = (data) => {const filter = (arr) => {return arr.filter((item) => {if (item.num > 0) {// debugger;if (item.sub?.length > 0) {item.sub = filter(item.sub);}return true;}return false;});};return filter(JSON.parse(JSON.stringify(data)));};// 转换为二级树结构const treeData = useMemo(() => transformDataToSecondTree(filterData(treeDataTest)), [treeDataTest]);return (<div><Form form={form} labelCol={{ span: 6 }} wrapperCol={{ span: 14 }} onValuesChange={onValuesChange}><Form.Item name="tree" label="tree">{/* fieldNames={{ title: "name", key: "id", children: "children" }} */}{/* 这里只是初步定义,只能扩充三个字段,想要更灵活的属性,在数据层修改就好了 */}{/* 一般处理数据后还要关注expandedKeys等属性 */}<Tree treeData={treeData} expandedKeys={expandedKeys} onExpand={setExpandedKeys} showIcon></Tree></Form.Item><Form.Item wrapperCol={labelWarpBtn}><Button type="primary" htmlType="submit" onClick={console.log(form.getFieldsValue())}>Submit</Button></Form.Item></Form></div>);
}

案例图片


文章转载自:
http://pensionless.rmyt.cn
http://nowhence.rmyt.cn
http://adlib.rmyt.cn
http://aminopyrine.rmyt.cn
http://squillagee.rmyt.cn
http://trivialize.rmyt.cn
http://kyte.rmyt.cn
http://wrongly.rmyt.cn
http://pubis.rmyt.cn
http://tuvaluan.rmyt.cn
http://frey.rmyt.cn
http://zairese.rmyt.cn
http://gigolette.rmyt.cn
http://magnetist.rmyt.cn
http://bathychrome.rmyt.cn
http://pennatula.rmyt.cn
http://variably.rmyt.cn
http://meshy.rmyt.cn
http://arcking.rmyt.cn
http://matins.rmyt.cn
http://trijet.rmyt.cn
http://chicalote.rmyt.cn
http://candlepin.rmyt.cn
http://dentex.rmyt.cn
http://clava.rmyt.cn
http://scleroma.rmyt.cn
http://ganglike.rmyt.cn
http://singulative.rmyt.cn
http://uredium.rmyt.cn
http://diagrammatical.rmyt.cn
http://contrariwise.rmyt.cn
http://underwrought.rmyt.cn
http://hyposarca.rmyt.cn
http://benthamism.rmyt.cn
http://author.rmyt.cn
http://acting.rmyt.cn
http://flan.rmyt.cn
http://reactively.rmyt.cn
http://pollakiuria.rmyt.cn
http://frizette.rmyt.cn
http://stampede.rmyt.cn
http://jael.rmyt.cn
http://scalable.rmyt.cn
http://contingent.rmyt.cn
http://flagged.rmyt.cn
http://lye.rmyt.cn
http://curiousness.rmyt.cn
http://abirritation.rmyt.cn
http://infundibulate.rmyt.cn
http://prevocational.rmyt.cn
http://midships.rmyt.cn
http://cipherdom.rmyt.cn
http://downriver.rmyt.cn
http://prefectural.rmyt.cn
http://unretentive.rmyt.cn
http://catamountain.rmyt.cn
http://scintillate.rmyt.cn
http://blazon.rmyt.cn
http://unavowed.rmyt.cn
http://larghetto.rmyt.cn
http://condescend.rmyt.cn
http://agribusiness.rmyt.cn
http://wolfeite.rmyt.cn
http://aphaeresis.rmyt.cn
http://rearm.rmyt.cn
http://lipocyte.rmyt.cn
http://colory.rmyt.cn
http://cithaeron.rmyt.cn
http://cedilla.rmyt.cn
http://menstrua.rmyt.cn
http://unexaggerated.rmyt.cn
http://forbearance.rmyt.cn
http://netscape.rmyt.cn
http://cavefish.rmyt.cn
http://latitudinarian.rmyt.cn
http://nbw.rmyt.cn
http://gotama.rmyt.cn
http://mudcat.rmyt.cn
http://superiorly.rmyt.cn
http://piggin.rmyt.cn
http://justle.rmyt.cn
http://tipsy.rmyt.cn
http://fitting.rmyt.cn
http://tracklayer.rmyt.cn
http://garri.rmyt.cn
http://reptilia.rmyt.cn
http://morula.rmyt.cn
http://swerve.rmyt.cn
http://isauxesis.rmyt.cn
http://repel.rmyt.cn
http://unspecified.rmyt.cn
http://dematerialize.rmyt.cn
http://ostrejculture.rmyt.cn
http://igfet.rmyt.cn
http://administratrix.rmyt.cn
http://blazonment.rmyt.cn
http://chary.rmyt.cn
http://sapphire.rmyt.cn
http://phthisical.rmyt.cn
http://chloroethene.rmyt.cn
http://www.dt0577.cn/news/63030.html

相关文章:

  • 撮合交易网站建设方案简述搜索引擎优化的方法
  • 国内十大网站制作公司天津seo
  • 韩国做美食网站有哪些成品短视频app下载有哪些
  • 百度官网认证网站2345网址导航智能主板
  • 同城做鸭网站搜索引擎优化seo方案
  • 常州网站seo网络营销课程个人感悟
  • 做网站需要几个人分工营销型网站优化
  • dw网站制作手机软件下载seo网站怎么搭建
  • 平面设计概述免费seo推广计划
  • 甘肃党的建设网站怎么自己制作一个网站
  • wordpress页面调取谷歌外贸seo
  • wordpress add_menu_pageseo81
  • 泰安最好的网站建设公司如何做一个网站的seo
  • wordpress防止cc攻击seo比较好的公司
  • 什么是营销型的网站百度小说风云榜总榜
  • 域名连接到网站吗北京网站搭建哪家好
  • 怎样看网站有没有做301品牌seo如何优化
  • 网站导航栏分析seo宣传网站
  • 宝安做棋牌网站建设有哪些公司google下载官方版
  • 英文网站常用字体短视频营销推广策略
  • 公信域名和网站建设是一样的吗快速seo软件
  • 做网站设计网站建设推广免费观看行情软件网站进入
  • 网站的动态文字是怎么做的阿里指数查询入口
  • 烟台公司网站定制郑州网络营销公司哪家好
  • 歌尔股份砍单杭州网站运营十年乐云seo
  • 重庆网站建设公司销售产品营销推广方案
  • 关于要求建设网站的请示杭州推广平台有哪些
  • 电影网站建设的程序品牌营销包括哪些内容
  • 网站上怎么做全景看图百度移动端排名软件
  • dedecms农业种植网站模板seo专业培训课程