当前位置: 代码网 > it编程>编程语言>Javascript > react+Typescript利用useState定义两层(多层)数组对象并进行赋值,以及如何在组件中map循环取数据渲染?

react+Typescript利用useState定义两层(多层)数组对象并进行赋值,以及如何在组件中map循环取数据渲染?

2024年08月02日 Javascript 我要评论
react+Typescript利用useState定义两层(多层)数组对象并进行赋值,以及如何在组件中map循环取数据渲染?

前言

在实际应用中,很多时候组件时嵌套关系,而react中组件中取数据只能取一层,但要定义多个数组对象又显得比较麻烦,后端可能为此多写几个接口。因此,在搭好组件框架后,我们可以先定义好数据结构,多层包裹数组对象,这样后端按我们定义好的数据结构写一个接口即可。


1.多层数组对象如何定义

以两层为例,代码如下(示例):

//内层(第一层)的类型
type jobinfo = {
    jobtype: string;
    jobstatus: string;
    jobtime: number;
    jobdate: string;
    fieldname: string;
    jobarea: number;
  };
  //内层的数据,这里直接写死了,当然也可以传值
  const [jobrecord, setjobrecord] = usestate<jobinfo[]>([
    {
      jobtype: '旋耕',
      jobstatus: '作业中',
      jobtime: 10,
      jobarea: 0,
      jobdate: '9.07.15:00-9.10.19:00',
      fieldname: '地块18-1'
    },
    {
      jobtype: '深翻',
      jobstatus: '已完成',
      jobtime: 10,
      jobarea: 10,
      jobdate: '9.07.15:00-9.10.19:00',
      fieldname: '地块18-1'
    },
    {
      jobtype: '除草',
      jobstatus: '已完成',
      jobtime: 8,
      jobarea: 10,
      jobdate: '9.07.15:00-9.10.19:00',
      fieldname: '地块18-1'
    },
    {
      jobtype: '旋耕',
      jobstatus: '作业中',
      jobtime: 10,
      jobarea: 0,
      jobdate: '9.07.15:00-9.10.19:00',
      fieldname: '地块18-1'
    }
  ]);

//外层(第二层)的类型
type agriculturalrecord = {
    agriculturalname: string;
    agriculturaloil: number;
    //此处类型为jobinfo[]
    agriculturaljobinfo: jobinfo[];
  };
  //外层的数据,同样可以传值
  const [agriculturalinforecord, setagriculturalinforecord] = usestate<agriculturalrecord[]>([
    {
      agriculturalname: '1号拖拉机',
      agriculturaloil: 50,
      //此处数据为第一层的jobrecord
      agriculturaljobinfo: jobrecord
    }
  ]);

如何传值,以第一层进行举例,三种方式,第三种后面补充再:

          //假设feas为地图要素,其中包括这些属性数据,直接取
          let jobrecordlist = [];
          jobrecordlist.push({
              //1、直接赋值
             jobtype: '深翻',
             jobstatus: '已完成',
             jobtime: 10,
             jobarea: 10,
             jobdate: '9.07.15:00-9.10.19:00',
             fieldname: '地块18-1'
             //2、feas传值
             jobtype: feas[0].values_.type,
             jobstatus: feas[0].values_.status,
             jobtime:feas[0].values_.time,
             jobarea:  number(feas[0].values_.area.tofixed(2)),
             jobdate: feas[0].values_.date,
             fieldname: feas[0].values_.name,
          });
          setjobrecord(jobrecordlist);

2.组件中的使用

代码如下(示例):

<div classname="agricultural-info-div" ref={overlaycontainerref1}>
    //外层循环遍历
    {agriculturalinforecord.map((ele, index) => {
        return (
          <div key={index}>
            <div classname="agricultural-info-lh">{ele.agriculturalname}</div>
            <div classname="agricultural-info-top-righttitle">{ele.agriculturaloil}</div>
            //内层循环遍历
            <div classname="agricultural-info-mid-content">
              {ele.agriculturaljobinfo.map((ele, index) => {
                return (
                  <div key={index} classname="agricultural-info-mid-content1">
                  <div classname="agricultural-info-c1">{ele.jobtype}</div>
                  <div classname="agricultural-info-c2">{ele.fieldname}</div>
                  ...
                  </div>
          </div>
            
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com