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

react项目中,在tab列表上展示某个字段以 数组形式 展示

在做中燃的项目时,遇到了一个需求,就是想要在展示的列表上,把发票展示成多个号码,在一个列里展示。对前端来说用 map,就可以了,需要后台配合,返回一个数组的形式

实例代码1
先看看 ant.design官网里的。
在这里插入图片描述
假设后端返回的是data

import { Table, Tag, Space } from 'antd';
const { Column, ColumnGroup } = Table;

const data = [
  {
    key: '1',
    firstName: 'John',
    lastName: 'Brown',
    age: 32,
    address: 'New York No. 1 Lake Park',
    tags: ['nice', 'developer'],
  },
  {
    key: '2',
    firstName: 'Jim',
    lastName: 'Green',
    age: 42,
    address: 'London No. 1 Lake Park',
    tags: ['loser'],
  },
  {
    key: '3',
    firstName: 'Joe',
    lastName: 'Black',
    age: 32,
    address: 'Sidney No. 1 Lake Park',
    tags: ['cool', 'teacher'],
  },
];
我们进行render 渲染
ReactDOM.render(
  <Table dataSource={data}>
    <ColumnGroup title="Name">
      <Column title="First Name" dataIndex="firstName" key="firstName" />
      <Column title="Last Name" dataIndex="lastName" key="lastName" />
    </ColumnGroup>
    <Column title="Age" dataIndex="age" key="age" />
    <Column title="Address" dataIndex="address" key="address" />
    <Column
      title="Tags"
      dataIndex="tags"
      key="tags"
      render={tags => (
        <>
          {tags.map(tag => (
            <Tag color="blue" key={tag}>
              {tag}
            </Tag>
          ))}
        </>
      )}
    />
    <Column
      title="Action"
      key="action"
      render={(text, record) => (
        <Space size="middle">
          <a>Invite {record.lastName}</a>
          <a>Delete</a>
        </Space>
      )}
    />
  </Table>,
  mountNode,
);

主要的就下面的步骤

  <Column
      title="Tags"
      dataIndex="tags"
      key="tags"
      render={tags => (
        <>
          {tags.map(tag => (
            <Tag color="blue" key={tag}>
              {tag}
            </Tag>
          ))}
        </>
      )}
    />

实例代码2

假设接口返回数据结构

{
"success": 1,
"msg": "获取成功",
"total": 2130,
"limit": 10,
"data": [
    {
        "id": 40,
        "times": [
            {
                "week": "星期二",
                “start": "17:30",
                "end": "19:30"
            },
            {
                "week": "星期一",
                "start": "13:16",
                "end": "14:01"
            }
        ]
    },
      
]

}

那么主要的代码是

render: times => (
          <span>
            {times.map(c => <div key={c.end}>{c.week}&nbsp;{c.start}&nbsp;{c.end}</div>)}
          </span>
        )

在这里插入图片描述
详细代码

import React, { PureComponent } from "react";
import { findDOMNode } from "react-dom";
import moment from "moment";
import { Link } from "react-router-dom";
import { connect } from "dva";
 
 
import styles from "./gradeList.less";
 
const FormItem = Form.Item;
 
@Form.create()
class GradeList extends PureComponent {
  deleteGrade = id => {
    const { dispatch } = this.props;
    dispatch({ type: "grade/deleteGrade", payload: { id: id } });
  };
  queryDeltail = id => {
    const { dispatch } = this.props;
    dispatch({ type: "grade/detail", payload: { id: id } });
  };
  handleOk = () => {
    const { dispatch } = this.props;
 
    dispatch({ type: "grade/hideModal" });
  };
  handleCancel = () => {
    const { dispatch } = this.props;
 
    dispatch({ type: "grade/hideModal" });
  };
  onchange = (page, pageSize) => {
    const { dispatch, form } = this.props;
    form.validateFields((err, values) => {
      if (!err) {
        dispatch({
          type: "grade/fetch",
          payload: { page: page, limit: pageSize, ...values }
        });
      }
    });
  };
  handleSearch = e => {
    e.preventDefault();
    const { dispatch, form } = this.props;
 
    form.validateFields((err, values) => {
      if (!err) {
        dispatch({ type: "grade/fetch", payload: { ...values } });
      }
    });
  };
  handleFormReset = () => {
    const { form } = this.props;
    form.resetFields();
  };
 
  render() {
    const gradeList = this.props.gradeList; // 列表展示
    const grade = JSON.stringify(gradeDetails) !== "[]" ? gradeDetails.grade : []; // 等级
    const modalVisible = this.props.modalVisible;
    const { dispatch } = this.props;
    const width = 1200;
 
    const pagination = { // 分页
      total: this.props.total,
      pageSize: 10,
      onChange: this.onchange
    };
 
    const columns = [ // 展示某个字段
      {
        title: "上课时间",
        dataIndex: "times",
        key: "times",
        render: times => (
          <span>
            {times.map(c => <div key={c.end}>{c.week}&nbsp;&nbsp;{c.start}&nbsp;-&nbsp;{c.end}</div>)}
          </span>
        )
      },
    ];
 
    return (
      <div className={styles.listback}>
        <Table
          columns={columns}
          dataSource={gradeList}
          rowKey={record => record.id}
          pagination={pagination}
        />
        
        <Modal
          width={width}
          visible={modalVisible}
          onOk={this.handleOk}
          onCancel={this.handleCancel}
        />
      </div>
    );
  }
}
function mapStateToProps(state) {
  return { ...state.grade };
}
export default connect(mapStateToProps)(GradeList);

实例3

{
title: '发票号码',
align: 'center',
dataIndex: 'invNos', //invoiceNumber
key: 'invNos'
// width: 150,
// render: (value, record) => {
//   const { id } = record || {};
//   return <Link to={`/fin/invoice/incomingRegister/view/${id}`}>{value}</Link>;
// }
 render={invNos => (
    <>
      {invNos.map(invNo => (
        <Tag color="blue" key={invNo}>
          {invNo}
        </Tag>
      ))}
    </>
  )}
},

下边是render展示

     <ElSearchTable
      id='incomingRegister'
      rowKey='id'
      tableId='fin_invoice_incomingRegisterList'
      onRef={(ref) => (this.tableRef = ref)}
      mode={{
        proxy: true, // 筛选器
        search: true, // searchForm
        action: true,
        pagination: true, // 分页
        descriptions: true, // descriptions
        tabs: false
      }}
      searchFormProps={getTableSearchFormItems()}
      columns={getTableColumns({that: this })}
      actionButtons={
        getTableActionButtons({
          handleCreate: this.handleCreate,
          handleImport: this.handleImport,
          handleExport: this.handleExport
      })
    }
      rowSelectionConfig={{
        disabledRowIds: [],
        // type: 'checkbox',
        type: 'radio',
        fixed: false,
        // onChange: ({ selectedRowKeys, selectedRows }) => {
        //   this.setState({
        //     selectedRowKeys,
        //     selectedRows
        //   });
        // }
      }}
      tableProxy={{
        request: (paramData) => {
          // paramData.orders = [{ asc: false, column: 'createTime' }];
          const params = {
            orders: [{ asc: false, column: 'createTime' }],
            ...paramData,
            settleEntityId: paramData.settleEntityId?.id,
            contactId: paramData.contactId?.id,
          // paramData.whId = paramData?.whId?.whId; //需要确定是否多选
          // paramData.itemId = paramData?.itemId?.map((x) => x.id); //需要确定是否多选
          // paramData.whId = paramData?.whId?.map((x) => x.whId); //需要确定是否多选

            ...this.handleValidRange(paramData) // 时间处理
          };

          return service.getList(params);
        },
        successCallBack: (tableRef) => { },
        errCallBack: () => {
          console.log('err');
        },
        props: {
          success: 'success',
          result: 'data.records',
          total: 'data.total'
        },
        autoLoad: true
      }}
    />
    这样就可以满足需求了
    欢迎提供更好的方法

相关文章:

  • Spark Streaming官方文档学习--下
  • Vue 判断两个时间选择框的校验element 。开始时间不能大于结束时间
  • 为什么不能访问django自带的索引页
  • SSIS 数据类型和类型转换
  • Vue,列表展示。多个字段拼接展示
  • Swift开发:NSLayoutConstraint纯代码实现自动布局-初级篇
  • react中的 Modal.confirm
  • 数据挖掘之决策树ID3算法(C#实现)
  • 【一小时入门】webpack 入门指南
  • Vue中 beforeRouteLeave离开路由之前要执行的操作
  • AF3.1.0简单二次封装
  • Vue 项目中 根目录中router路由拦截 beforeEach 常用的写法
  • 不同按钮模板自定义
  • react项目中没有路由守卫,需要拦截的话,只能在路径上拦截,可以自己去封装 Route
  • 跟锦数学160823-190322, 共 942 题
  • 自己简单写的 事件订阅机制
  • CSS 提示工具(Tooltip)
  • ES6 学习笔记(一)let,const和解构赋值
  • input实现文字超出省略号功能
  • maya建模与骨骼动画快速实现人工鱼
  • mockjs让前端开发独立于后端
  • Xmanager 远程桌面 CentOS 7
  • Zsh 开发指南(第十四篇 文件读写)
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 基于Android乐音识别(2)
  • 基于HAProxy的高性能缓存服务器nuster
  • 码农张的Bug人生 - 初来乍到
  • 面试总结JavaScript篇
  • 七牛云假注销小指南
  • 使用agvtool更改app version/build
  • 线上 python http server profile 实践
  • 智能合约Solidity教程-事件和日志(一)
  • #QT项目实战(天气预报)
  • (C++20) consteval立即函数
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)计算机毕业设计高校学生选课系统
  • (论文阅读11/100)Fast R-CNN
  • (论文阅读40-45)图像描述1
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (算法)N皇后问题
  • (转载)CentOS查看系统信息|CentOS查看命令
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .bashrc在哪里,alias妙用
  • .Net - 类的介绍
  • .NET Core 项目指定SDK版本
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .Net IE10 _doPostBack 未定义
  • .Net Winform开发笔记(一)
  • .Net7 环境安装配置
  • .net下的富文本编辑器FCKeditor的配置方法
  • @EnableAsync和@Async开始异步任务支持
  • [.NET]桃源网络硬盘 v7.4
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution