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

wordpress面包屑插件seo免费

wordpress面包屑插件,seo免费,虚拟主机做网站,企业自助建站哪家好在写一个表单时使用了antd的 TreeSelect,在对TreeSelect的值提交时发现,父节点的值在半选状态时未提交,在选中状态时(子节点全选),子节点不提交,只提交父节点,这与后端需求不符&…

在写一个表单时使用了antd的 TreeSelect,在对TreeSelect的值提交时发现,父节点的值在半选状态时未提交,在选中状态时(子节点全选),子节点不提交,只提交父节点,这与后端需求不符,后端要求提交全部的节点,所有手动改造了一下,以适应需求,组件代码如下:
 

import { TreeSelect } from "antd";
import React, { useState, useEffect } from "react";export type FromTreeItem = {key?: number | string;title?: string;parentKey?: number | string;value?: number | string;children?: FromTreeItem[];
};export type FromTreeSelectProps = {value?: any;treeData?: FromTreeItem[];onChange?: (value: any) => void;
};/**  * 解决antd TreeSelect 返回值不包含父节点问题  * @param props   * @returns   */
const FromTreeSelect: React.FC<FromTreeSelectProps> = (props) => {const [selectedKeys, setSelectedKeys] = useState<(string | number)[]>([]);const [treeDataMap, setTreeDataMap] = useState<Record<string | number, FromTreeItem>>({});const treeToMap = (tree: FromTreeItem[]): Record<string | number, FromTreeItem> => {const map: Record<string | number, FromTreeItem> = {};const traverse = (nodes: FromTreeItem[]) => {nodes.forEach(node => {node.key ? map[node.key] = node : null; // 将当前节点添加到映射中  if (node.children) {traverse(node.children); // 递归遍历子节点  }});};traverse(tree); // 从根节点开始遍历  return map;};useEffect(() => {if (props.treeData)setTreeDataMap(treeToMap(props.treeData))}, [props.treeData]);useEffect(() => {// 初始化 selectedKeys  if (props.value && treeDataMap) {setSelectedKeys(getAllChildrenKey(props.value));}}, [treeDataMap, props.value]);/**  * 根据选中的key找到所有父节点key并一起返回  * @param selectKeys   */const getAllNodeKey = (selectKeys: (string | number)[]): (string | number)[] => {const allKeys = new Set<string | number>(selectKeys);;const traverse = (node: FromTreeItem) => {if (node.parentKey) {allKeys.add(node.parentKey)traverse(treeDataMap[node.parentKey])}};selectKeys.forEach(key => {traverse(treeDataMap[key])});return Array.from(allKeys);};/**  * 根据给定的值 ,找到给定节点是否选中了子节点,如选中了子节点,则删除当前节点* @param keys   * @param tree   */const getAllChildrenKey = (keys: (string | number)[]): (string | number)[] => {if (!keys)return []const allKeys = new Set<string | number>(keys);keys.forEach(key => {const node: FromTreeItem = treeDataMap[key];if (node.children) {node.children.forEach((child) => {if (node.key && allKeys.has(node.key) && child.key && allKeys.has(child.key)) {allKeys.delete(node.key)}});}})return Array.from(allKeys);};const handleChange = (newKeys: (string | number)[]) => {setSelectedKeys(newKeys);if (props.onChange) {props.onChange(getAllNodeKey(newKeys));}};const { SHOW_ALL } = TreeSelect;return (<TreeSelecttreeCheckabletreeData={props.treeData}value={selectedKeys}onChange={handleChange}showCheckedStrategy={SHOW_ALL}/>);
};export default FromTreeSelect;

使用方式同antd的其他组件,如:
 

 <Form.Itemname={'menuIds'}label={'菜单'}rules={[{ required: true }]}><FromTreeSelect treeData={menuTreeData} /></Form.Item>

http://www.khdw.cn/news/65956.html

相关文章:

  • 做团购网站商品从哪里找关键词推广工具
  • ecshop网站创建bbs 百度经验福州网站制作推广
  • 广州商城网站建设南昌seo顾问
  • 计算机网站设计宁波网站制作优化服务
  • 游戏网站建站公司网站如何制作
  • 行业网站建设方案建网络平台要多少费用
  • 北京哪里做网站好今天国内新闻
  • 网易做的什么网站seo站内优化最主要的是什么
  • 深圳做商城网站建设如何制作一个公司网站
  • 加强政府网站建设工作要求google搜索引擎入口 镜像
  • 用vs2010里的vb做网站seo网络优化师
  • 专业平台建设沈阳seo按天计费
  • 深圳国税局深圳做网站公司百度广告联盟收益
  • 最专业的企业营销型网站建设seo分析报告怎么写
  • post wordpress apiseo中心
  • 国外网站推广平台有哪些公司广东网站营销seo方案
  • 网站伪静态文件百度小说搜索风云榜排行榜
  • 做网站常见问题模板注册城乡规划师含金量
  • 平面设计大师营销推广seo
  • 济南集团网站建设方案连接交换
  • 网站建设论文的结论龙华百度快速排名
  • 导航网站教程杭州seo招聘
  • 医院门户网站制作宁波seo整站优化
  • 设计开发建设网站网上推广专员是什么意思
  • 长沙网站排名报价宜昌网站建设公司
  • 专业电商网站开发淘宝推广哪种方式最好
  • 网站建设项目预算媒体代发网站
  • 网站标题更新企业网址搭建
  • 只做男生穿搭的网站如何做百度搜索推广
  • 海口网站制作企业北京营销公司排行榜