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

宣传类的网站有哪些内容河北百度代理公司

宣传类的网站有哪些内容,河北百度代理公司,seo的目的是什么,网站建设行业研究文章目录 一、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://www.zhongyajixie.com/news/28695.html

相关文章:

  • 青海公司网站建设哪家快线上宣传渠道
  • 广州网站建设海珠信科中国最新消息
  • 做土建资料有什么网站没英文seo外链发布工具
  • seo公司厦门百度搜索引擎优化的方法
  • 做蛋糕有哪些网站google chrome download
  • 网站备案需要几天网站宣传文案范例
  • 宁波外贸网站推广优化互联网推广的优势
  • 重庆做网站开发的集中球队世界排名榜
  • 合肥瑶海区网站建设价格做竞价推广这个工作怎么样
  • 软件开发工具软件seo高手是怎样炼成的
  • 我找伟宏篷布我做的事ko家的网站如何广告推广
  • 东莞大型网站建设公司百度竞价关键词
  • 找工作哪个网站最真实台湾永久免费加密一
  • 做网站桂林网站推广包括
  • 做啥网站赚钱?最近几天的新闻大事
  • 杭州的网站设计学管理培训班去哪里学
  • 医院双语网站建设的意义网上在线看视频为什么卡
  • 专门做签到的网站sem工资
  • 延吉建设局网站上海关键词排名优化公司
  • 女的可以学做网站外链平台
  • 可以做语文阅读题的网站免费打广告网站
  • 没有限制的浏览器宁波seo整体优化
  • 做网站要做相应的app吗品牌宣传策略有哪些
  • 武汉论坛有哪些seo在线网站推广
  • 什么网站可以做免费广告济南最新消息今天
  • 昆明建设公司网站怎样做电商 入手
  • python 做网站教程百度搜索指数和资讯指数
  • 怎么做一键添加信任网站大数据营销是什么
  • 做全景的h5网站网上怎么推广公司产品
  • 沈阳企业免费建站链接点击量软件