首页 > 其他分享 >【React工作记录一百一十七】hook项目实例之原始数据形成ant design table表格

【React工作记录一百一十七】hook项目实例之原始数据形成ant design table表格

时间:2023-06-20 18:04:38浏览次数:31  
标签:React style code name standard ant hook qc id

前言

大家好 我是歌谣 由于项目最近使用的数据统一由postgrest定义 所以返回的数据只能是 各个表之间的层级关系

数据格式

[
  {
    "id": 1,
    "code": "JP",
    "name": "皮夹克",
    "t_base_style": [
      {
        "id": 66,
        "code": "JPAP12019",
        "name": "JPAP12019",
        "category_id": 1,
        "t_base_part_region": [
          {
            "id": 430,
            "code": "下摆袖口",
            "name": "下摆袖口",
            "style_id": 66,
            "t_qc_reference_standard": [
              {
                "id": 27,
                "style_id": 66,
                "region_id": 430,
                "size_id": null,
                "standard": 1212
              }
            ]
          }
        ]
      },
      {
        "id": 44,
        "code": "JPQJ2422",
        "name": "JPQJ2422",
        "category_id": 1,
        "t_base_part_region": [
          {
            "id": 11,
            "code": "内胆包边",
            "name": "内胆包边",
            "style_id": 44,
            "t_qc_reference_standard": []
          },
          {
            "id": 12,
            "code": "领面帽檐",
            "name": "领面帽檐",
            "style_id": 44,
            "t_qc_reference_standard": []
          },
          {
            "id": 13,
            "code": "门襟",
            "name": "门襟",
            "style_id": 44,
            "t_qc_reference_standard": []
          },
          {
            "id": 14,
            "code": "下摆",
            "name": "下摆",
            "style_id": 44,
            "t_qc_reference_standard": []
          },
          {
            "id": 15,
            "code": "帽子",
            "name": "帽子",
            "style_id": 44,
            "t_qc_reference_standard": []
          }
        ]
      },
      {
        "id": 97,
        "code": "JPLJ9513",
        "name": "JPLJ9513",
        "category_id": 1,
        "t_base_part_region": [
          {
            "id": 431,
            "code": "下摆袖口",
            "name": "下摆袖口",
            "style_id": 97,
            "t_qc_reference_standard": []
          }
        ]
      },
      {
        "id": 112,
        "code": "JPTZS3149",
        "name": "JPTZS3149",
        "category_id": 1,
        "t_base_part_region": [
          {
            "id": 9,
            "code": "口袋内包边",
            "name": "口袋内包边",
            "style_id": 112,
            "t_qc_reference_standard": []
          },
          {
            "id": 432,
            "code": "下摆袖口",
            "name": "下摆袖口",
            "style_id": 112,
            "t_qc_reference_standard": []
          }
        ]
      },
      {
        "id": 63,
        "code": "ZS3148",
        "name": "ZS3148",
        "category_id": 1,
        "t_base_part_region": [
          {
            "id": 429,
            "code": "下摆袖口",
            "name": "下摆袖口",
            "style_id": 63,
            "t_qc_reference_standard": []
          }
        ]
      },
      {
        "id": 150,
        "code": "LJ9541",
        "name": "LJ9541",
        "category_id": 1,
        "t_base_part_region": [
          {
            "id": 434,
            "code": "下摆袖口",
            "name": "下摆袖口",
            "style_id": 150,
            "t_qc_reference_standard": []
          }
        ]
      },
      {
        "id": 152,
        "code": "JPLJ1207",
        "name": "JPLJ1207",
        "category_id": 1,
        "t_base_part_region": [
          {
            "id": 435,
            "code": "下摆袖口",
            "name": "下摆袖口",
            "style_id": 152,
            "t_qc_reference_standard": []
          }
        ]
      },
      {
        "id": 155,
        "code": "JP9562",
        "name": "JP9562",
        "category_id": 1,
        "t_base_part_region": [
          {
            "id": 436,
            "code": "下摆袖口",
            "name": "下摆袖口",
            "style_id": 155,
            "t_qc_reference_standard": []
          }
        ]
      },
      {
        "id": 157,
        "code": "JPLJ9513/202组",
        "name": "JPLJ9513/202组",
        "category_id": 1,
        "t_base_part_region": [
          {
            "id": 437,
            "code": "下摆袖口",
            "name": "下摆袖口",
            "style_id": 157,
            "t_qc_reference_standard": []
          }
        ]
      },
      {
        "id": 169,
        "code": "JPQJ2315",
        "name": "JPQJ2315",
        "category_id": 1,
        "t_base_part_region": [
          {
            "id": 438,
            "code": "下摆袖口",
            "name": "下摆袖口",
            "style_id": 169,
            "t_qc_reference_standard": []
          }
        ]
      },
      {
        "id": 179,
        "code": "JPQJ2320",
        "name": "JPQJ2320",
        "category_id": 1,
        "t_base_part_region": [
          {
            "id": 439,
            "code": "下摆袖口",
            "name": "下摆袖口",
            "style_id": 179,
            "t_qc_reference_standard": []
          }
        ]
      },
      {
        "id": 140,
        "code": "JP82131",
        "name": "JP82131",
        "category_id": 1,
        "t_base_part_region": [
          {
            "id": 433,
            "code": "下摆袖口",
            "name": "下摆袖口",
            "style_id": 140,
            "t_qc_reference_standard": []
          }
        ]
      }
    ]
  }
]

总共可以看出是三层结构 所以要处理成对应的表头和表数据格式

数据处理过程

let arr: any = []
                    response.data && response.data.map((item: any, index: number) => {
                        item.t_base_style && item.t_base_style.map((item1: any, index1: any) => {
                            item1.t_base_part_region && item1.t_base_part_region.map((item2: any, index2: any) => {
                                if(item2.t_qc_reference_standard.length==0){
                                    arr.push({
                                        part: item2.name,
                                        styleNumber: item1.name,
                                        product: item.name,
                                        styleId: item1.id,
                                        partId: item2.id,
                                        flag: item2.qc_flag,
                                       
                                    })
                                }else{
                                    item2.t_qc_reference_standard&&item2.t_qc_reference_standard.map((item3:any,index3:any)=>{
                                        arr.push({
                                            part: item2.name,
                                            styleNumber: item1.name,
                                            product: item.name,
                                            styleId: item1.id,
                                            partId: item2.id,
                                            flag: item2.qc_flag,
                                            flagId:item3.id
                                        })
                                    })
                                }  
                            })
                        })

操作要点1 形成column和datasource格式

<BasicTable data={menuData} onChange={onTableChange} loading={loading}>
                <Table.Column<Menu> title="品类" dataIndex="product" align="center"></Table.Column>
                <Table.Column<Menu> title="款式" dataIndex="styleNumber" align="center"></Table.Column>
                <Table.Column<Menu> title="部件" dataIndex="part" align="center"></Table.Column>
                <Table.Column<Menu> title="是否维护" dataIndex="flag" align="center" render={(text, record, index) => (
                    <span>{text ? "已维护" : "未维护"}</span>
                )}></Table.Column>
                <Table.Column<Menu>
                    title="操作"
                    align="center"
                    render={(text, record, index) => (
                        <MenuButton index={index} record={record} onButtonClick={onButtonClick} />
                    )}
                ></Table.Column>
            </BasicTable>

操作要点2 查询数据

关键要有两份数据

setMenuData({
                        list: arr, page: {
                            dataTotal: arr.length,
                            pageTotal: arr.length,
                            size: response.size,
                            page: response.current
                        }
                    });
                    setMenuDataCopy({
                        list: arr, page: {
                            dataTotal: arr.length,
                            pageTotal: arr.length,
                            size: response.size,
                            page: response.current
                        }
                    });

重置和过滤逻辑

const onSearch =
        (params: any) => {
            if (Object.keys(params).length > 0) {
                let arr: any = []
                var data: any = JSON.parse(JSON.stringify(menuDataCopy))
                console.log(data, "datadata")
                arr = data.list.filter((item: any, index: any) => {
                    return item.styleNumber == params.styleNumber
                })
                console.log(arr)
                setMenuData({
                    list: arr, page: {
                        dataTotal: arr.length,
                        pageTotal: arr.length,
                    }
                });
            } else {
                setMenuData(menuDataCopy)
            }
        }

结果展示

【React工作记录一百一十七】hook项目实例之原始数据形成ant design table表格_数据

总结

以上就是对真实项目数据处理的讲解 我是歌谣 感谢你的阅读

标签:React,style,code,name,standard,ant,hook,qc,id
From: https://blog.51cto.com/u_14476028/6524010

相关文章

  • 一键hook js Crypto库的加密方法
    一键hookjsCrypto库的加密方法//一键HookCrypto几个基本的方法AESDES3DESHmacSHARSA(function(){'usestrict';console.log("Hook脚本初始化成功");//过dubuggervarconstructorEx=constructor;Function.prototype.constructor=func......
  • React - 31 redux和react-redux的归纳梳理
    如果使用redux1.把reducer/状态按照模块进行划分和管理;把所有模块的reducer合并为一个即可!!2.每一次任务派发,都会把所有模块的reducer,依次去执行,派发时候传递的行为对象(行为标识)是统一的!!所以我们要保证各个模块之间,派发的行为标识的唯一性!!>派发行为标识的统一管理!!3.需......
  • React 性能優化:使用 memo、useCallback、useMemo
    在寫網頁時,我們通常習慣把一個頁面切割成很多的元件(Component),讓我們容易組織與管理頁面的組成。但是在React中複雜的元件關係,如果沒有經過優化,將有可能會造成性能上的問題。在FunctionComponent中,重新渲染(re-render)很輕易就會被觸發,少量的元件時還不會發生太大的問......
  • react-native 调用系统原生分享
    调用手机系统原生分享如下图 使用: react-native-sharereact-native-share官网......
  • react经典面试题解析--持续更新--day02
    二十一、高阶组件的使用场景1、数据获取:高阶组件可以在组件挂载时自动获取数据,并将数据通过props传递给被包装组件。2、权限控制:高阶组件可以检查用户是否有访问该组件的权限,从而决定是否渲染该组件。3、代码重用:高阶组件可以通过封装一些常见的逻辑,来提高代码的复用性。4、......
  • php webhook excute that can pull code
      <?phpexec('whoami2>&1',$res);var_dump($res);exec('cd'.dirname(__FILE__).'/../&&sudogitpulloriginmaster2>&1',$res,$rc);var_dump($rc);if($rc==0){echo'部署成功<br&g......
  • 【React工作记录一百一十四】前端小知识点扫盲笔记记录12
    前言我是歌谣放弃很容易但是坚持一定很酷微信公众号关注前端小歌谣带你进入前端巅峰交流群今天继续对前端知识的小结手写instanceOf~<!DOCTYPEhtml><htmllang="en"> <head> <metacharset="UTF-8"/> <metahttp-equiv="X-UA-Compatible"content="IE=edge&......
  • 【React工作记录一百一十五】前端小知识点扫盲笔记记录13
    前言我是歌谣放弃很容易但是坚持一定很酷微信公众号关注前端小歌谣带你进入前端巅峰交流群今天继续对前端知识的小结数组去重的方式<!DOCTYPEhtml><htmllang="en"> <head> <metacharset="UTF-8"/> <metahttp-equiv="X-UA-Compatible"content="IE=edge"......
  • 谈谈Vue3中的ref和reactive
    谈谈Vue3中的ref和reactiveref和reactive是什么?ref和reactive是Vue3中用来实现数据响应式的API一般情况下,ref定义基本数据类型,reactive定义引用数据类型(我喜欢用它来定义对象,不用它定义数组,原因后面讲)我理解的ref本质上是reactive的再封装二、先聊reactivereactive定义引用数据......
  • 利用react-json-view最JSON数据进行渲染
    1.安装npminstall--savereact-json-view2.使用importReactJsonfrom"react-json-view";constA=()=>{letsrc={"content-length":"675","x-b3-parentspanid":"06c634eea567252a",&quo......