web3 从redux中拿出所有已完成订单 并渲染到对应的Table列表中

news2024/11/24 9:57:03

上文web3 React dapp项目通过事件从区块链中拿到 已取消 已完成 和所有的订单数据 并存入redux中
中 我们已经从 区块中拿到了自己的订单
然后 我们恢复一下上文的环境
ganache

ganache -d

在这里插入图片描述
然后 登一下 MetaMask
在这里插入图片描述
然后 用我们的项目 发布一下合约

truffle migrate --reset

在这里插入图片描述
然后 我们运行一下测试脚本 创建订单和转让交易所ETH与token

truffle exec .\scripts\test.js

在这里插入图片描述
然后 我们运行起自己的dapp项目
在这里插入图片描述
然后 我们找到 src下 components 目录下的 Order.jsx组件
我们引入一下 我们写在 redux中的 order数据
在这里插入图片描述
这里 我们拿取了 我们之前在redux中的 order 订单内容
在这里插入图片描述
然后 我们刷新一下看控制台
在这里插入图片描述
一开始 他们都是空的 然后 后面数据就加载出来了

然后 我们看这个数据结构 主要有用的是 timestamp 一个创建时间的时间搓
然后 amountGet 对应的 grtoken 然后 amountGive 对应的 ETH
在这里插入图片描述
这样 我们先通过 order 下的 Fillorders 渲染一下已完成的订单列表
找到 src下 components 目录下的 Order.jsx组件 更改代码如下

import React from 'react';
import { Card, Col, Row ,Table } from 'antd';
import {useSelector} from "react-redux"
export default function Order() {
  const order = useSelector(state => state.order)

  console.log(order)
  const dataSource = [
    {
      key: '1',
      name: '胡彦斌',
      age: 32,
      address: '西湖区湖底公园1号',
    },
    {
      key: '2',
      name: '胡彦祖',
      age: 42,
      address: '西湖区湖底公园1号',
    },
  ];
  
  const columns = [
    {
      title: 'ETH',
      dataIndex: 'amountGive'
    },
    {
      title: 'GrToken',
      dataIndex: 'amountGet'
    },
    {
      title: '创建时间',
      dataIndex: 'timestamp'
    },
  ];
  
  return (
    <div style = {{marginTop:'10px'}}>
      <Row>
         <Col span={8}>
          <Card title="已完成" bordered={false} style = {{ margin: '10px' }}>
            <Table dataSource={order.Fillorders} columns={columns} />
          </Card>
         </Col>
         <Col span={8}>
          <Card title="我创建的" bordered={false} style = {{ margin: '10px' }}>
            <Table dataSource={dataSource} columns={columns} />
          </Card>
         </Col>
         <Col span={8}>
          <Card title="其他交易中订单" bordered={false} style = {{ margin: '10px' }}>
            <Table dataSource={dataSource} columns={columns} />
          </Card>
         </Col>
      </Row>
    </div>
  );
}

这样 我们列表绑定了 order.Fillorders 并更改了 columns 字段的配置
运行效果如下
在这里插入图片描述
虽然 我们的数据出来了 但他们的格式都有点问题 我们都需要后期处理一下
我们先将代码改成这样

import React from 'react';
import { Card, Col, Row ,Table } from 'antd';
import {useSelector} from "react-redux"

function convert(unit) {
  return window.WebData ? unit&&window.WebData.web3.utils.fromWei(unit, "ether") : ""
}

export default function Order() {
  const order = useSelector(state => state.order)

  console.log(order)
  const dataSource = [
    {
      key: '1',
      name: '胡彦斌',
      age: 32,
      address: '西湖区湖底公园1号',
    },
    {
      key: '2',
      name: '胡彦祖',
      age: 42,
      address: '西湖区湖底公园1号',
    },
  ];
  
  const columns = [
    {
      title: 'ETH',
      dataIndex: 'amountGive',
      render:(amountGive)=><b>{ convert(amountGive) }</b>,
      key: 'amountGive',
    },
    {
      title: 'GrToken',
      dataIndex: 'amountGet',
      render:(amountGet)=><b>{ convert(amountGet) }</b>,
      key: 'amountGet',
    },
    {
      title: '创建时间',
      dataIndex: 'timestamp',
      key: 'timestamp',
    },
  ];
  
  return (
    <div style = {{marginTop:'10px'}}>
      <Row>
         <Col span={8}>
          <Card title="已完成" bordered={false} style = {{ margin: '10px' }}>
            <Table dataSource={order.Fillorders} columns={columns} />
          </Card>
         </Col>
         <Col span={8}>
          <Card title="我创建的" bordered={false} style = {{ margin: '10px' }}>
            <Table dataSource={dataSource} columns={columns} />
          </Card>
         </Col>
         <Col span={8}>
          <Card title="其他交易中订单" bordered={false} style = {{ margin: '10px' }}>
            <Table dataSource={dataSource} columns={columns} />
          </Card>
         </Col>
      </Row>
    </div>
  );
}

我们将一个单位转换的 convert 函数 搬了个来
然后对 amountGive 和 amountGet 进行单位的转换 运行代码
在这里插入图片描述
这样 我们的两个单位就好了
然后这个时间搓
其实 他也不完全是个时间搓 他是一个距离 1970年01月01号 0点 的秒
而不是毫秒
我们先终端执行

npm i --save moment

引入一下 moment
在这里插入图片描述
然后 我们将代码改成这样

import React from 'react';
import { Card, Col, Row ,Table } from 'antd';
import {useSelector} from "react-redux"
import moment from "moment"

function converTime(t){
  return moment(t*1000).format("YYYY/MM/DD")
}

function convert(unit) {
  return window.WebData ? unit&&window.WebData.web3.utils.fromWei(unit, "ether") : ""
}

export default function Order() {
  const order = useSelector(state => state.order)

  console.log(order)
  const dataSource = [
    {
      key: '1',
      name: '胡彦斌',
      age: 32,
      address: '西湖区湖底公园1号',
    },
    {
      key: '2',
      name: '胡彦祖',
      age: 42,
      address: '西湖区湖底公园1号',
    },
  ];
  
  const columns = [
    {
      title: 'ETH',
      dataIndex: 'amountGive',
      render:(amountGive)=><b>{ convert(amountGive) }</b>,
      key: 'amountGive'
    },
    {
      title: 'GrToken',
      dataIndex: 'amountGet',
      render:(amountGet)=><b>{ convert(amountGet) }</b>,
      key: 'amountGet'
    },
    {
      title: '创建时间',
      dataIndex: 'timestamp',
      render:(timestamp)=><div>{ converTime(timestamp) }</div>,
      key: 'timestamp'
    },
  ];
  
  return (
    <div style = {{marginTop:'10px'}}>
      <Row>
         <Col span={8}>
          <Card title="已完成" bordered={false} style = {{ margin: '10px' }}>
            <Table dataSource={order.Fillorders} columns={columns} />
          </Card>
         </Col>
         <Col span={8}>
          <Card title="我创建的" bordered={false} style = {{ margin: '10px' }}>
            <Table dataSource={dataSource} columns={columns} />
          </Card>
         </Col>
         <Col span={8}>
          <Card title="其他交易中订单" bordered={false} style = {{ margin: '10px' }}>
            <Table dataSource={dataSource} columns={columns} />
          </Card>
         </Col>
      </Row>
    </div>
  );
}

这里 我们定义了 一个 converTime 函数 我们将传进来的参数 先乘以 1000
因为 我们不是毫秒 而是秒 要把单位换一下
然后 通过moment提供的 format 将他转换为指定的时间格式 然后在render中转一下
运行结果如下
在这里插入图片描述
这样 我们的时间就出来了

但现在 我们控制台一直在报一个错
在这里插入图片描述
说我们表单的 dataSource 少了 key字段
因为 列表上 每一条数据 都需要有一个唯一标识
其实 我们订单中是有唯一标识字段 id 的
在这里插入图片描述
所以 这是个美妙的误会 我们设置的字段叫id 但 列表组件要的叫 key

这里 我们只需要加一个 rowKey 标签属性
这是 antd Table 组件特定的 设置key的组件
在这里插入图片描述
这里 我们给到 字段是 id 让他将每一个的id读成key

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1189250.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汽车标定技术(八)--MPC57xx是如何支持标定的页切换

目录 1.页切换的概念 1.1 标定常量的理解 1.2 页切换 2.MPC57xx的Overlay模块 3.小结 1.页切换的概念 在汽车标定测量中&#xff0c;有一个概念我想很多人都听过&#xff0c;但是实际上在项目里没有用到过&#xff0c;那就是今天要讲的页切换概念。在讲页切换的时候&#…

自考改革过渡期!广东小自考最优解只需要2门笔试

图片来源&#xff1a;广东省考试院* 近期广东教育考试院公布了自考专业调整的相关通知&#xff0c;新的专业考试计划从2026年1月起执行。 这次改革过渡期中有一个重大利好消息&#xff0c;小自考专业笔试统考科目最少只需考2门笔试&#xff01; 这是为什么呢&#xff1f; 小…

蓝牙安全管理(SM:Security Manager)规范详解

总述 配对(Pairing)分为三个阶段&#xff0c;前两个阶段是必须的&#xff0c;而第三阶段是可选的&#xff0c;三个阶段如下&#xff1a; 阶段1&#xff1a;配对功能交换(Pairing Feature Exchange) 阶段2(LE传统配对 LE legacy pairing)&#xff1a;短期密钥(STK:Short Term…

阿里巴巴国际站为什么凉了?数字一体化方案崛起!

随着全球化和数字化的浪潮不断涌现&#xff0c;跨境电商市场一直以惊人的速度增长。中国作为主要的出口和进口市场之一&#xff0c;成为跨境贸易的重要参与者。然而&#xff0c;近年来&#xff0c;阿里巴巴国际站似乎面临了一些挑战&#xff0c;同时数字一体化方案崭露头角&…

FallO’ween 活动:元宇宙中秋天与万圣节的邂逅

秋风徐徐&#xff0c;万圣节已经来临&#xff01;还有什么比沉浸在 FallOween 的世界更好的方式来庆祝这个“恐怖“的季节呢&#xff1f;这项全新的季节性活动将于 10 月 30 日推出&#xff0c;将秋季的迷人气息与万圣节的怪异魅力融为一体&#xff0c;为大家带来为期 30 天的冒…

初识Java 17-4 反射

本笔记参考自&#xff1a; 《On Java 中文版》 接口和类型信息 interface关键字的一个重要目标就是允许程序员隔离组件&#xff0c;减少耦合。但我们可以通过类型信息来绕过接口的隔离&#xff0c;这使得接口不一定能够保证解耦。 为了演示这一实现&#xff0c;我们需要先创建一…

LabVIEW调用库函数节点无法显示DLL中的函数

LabVIEW调用库函数节点无法显示DLL中的函数 正在使用调用库函数节点来调用一个DLL文件。可是&#xff0c;当浏览该DLL时&#xff0c;却无法在Function Name下拉菜单中选择任何函数。为什么所有的DLL函数都无法选中呢&#xff1f; 解答: 调用的DLL可能是通过.NET封装的&#x…

1.77亿美元,安世被迫出售晶圆大厂NWF | 百能云芯

11月9日消息&#xff0c;安世半导体&#xff08;Nexperia&#xff09;与纽交所上市公司威世&#xff08;Vishay&#xff09;签署协议&#xff0c;作价1.77亿美元出售英国Newport Wafer Fab&#xff08;以下简称NWF&#xff09;的母公司NEPTUNE 6 LIMITED&#xff08;以下简称“…

kubectl 资源管理命令-陈述式

目录 一、kubectl陈述式资源管理&#xff1a; 二、kubectl陈述式对象管理&#xff1a; 1.基础命令使用&#xff1a; 1.1 帮助手册&#xff1a; 1.2 查看版本信息&#xff1a; ​编辑 1.3 查看资源对象简写: 1.4 查看集群信息: 1.5 配置kubectl自动补全: 1.6 node节点查看日志…

使用Net2FTP轻松打造免费的Web文件管理器并公网远程访问

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一&#xff0c;特别是智能设备的大面积使用&#xff0c;无论是个人…

【LeetCode百道热题】1.两数之和

一&#xff0c;题目描述 给定一个整数数组nums和一个整数目标值target&#xff0c;请你在改数组中找出和为目标值target的那两个整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;但是&#xff0c;数组中同一个元素在答案里不能重复出现…

Win10 180天后怎么才能继续体验,自动保持续期,无需手动JH

环境: Win10 专业版 自制小程序 问题描述: Win10 180天后怎么才能继续体验,自动保持续期,无需手动JH 解决方案: 在执行本程序前需要以管理员身份运行!关闭杀毒软件,否则会失败,本方案只能在个人电脑测试体验, 只能用于学习测试体验 ,勿用与商业行为 1.先完全JH…

RFID电力资产全周期智能化管理应用解决方案

电力行业需求 国家电网提出了建设“泛在电力物联网”的计划&#xff0c;旨在利用现代信息技术和先进通信技术&#xff0c;实现电力系统各环节的万物互联&#xff0c;构建一个具备全面感知、高效处理和便捷灵活特征的智慧服务系统&#xff0c;其中&#xff0c;重点方向之一是围…

深眸科技聚焦3D机器视觉技术,从技术形态到应用前景实现详细分析

机器视觉技术的不断升级&#xff0c;使得对二维图像的处理逐渐扩展到了更复杂的三维领域&#xff0c;形成了3D机器视觉。3D机器视觉是机器视觉的重要应用领域之一&#xff0c;通过计算机能够在短时间内处理视觉传感器采集的图像信号&#xff0c;从而获得目标对象的三维信息。 …

2023云栖大会,Salesforce终敲开中国CRM市场

2015年被视为中国CRM SaaS元年&#xff0c;众多CRM SaaS创业公司和厂商在Salesforce的榜样作用下涌入了CRM SaaS赛道。在全球市场&#xff0c;Salesforce是CRM SaaS领域的领导厂商&#xff0c;连续多年占据了全球CRM SaaS第一大厂商地位。然而&#xff0c;Salesforce作为业务类…

22款奔驰GLS450升级HUD抬头显示简洁的展示

说起HUD抬头显示这个配置&#xff0c;最初是用在战斗机上的&#xff0c;它可以让战斗机驾驶员读取飞机的各种信息和状态&#xff0c;而无需移动头部&#xff0c;这样就能够有效的提高效率。但随着汽车技术的进步HUD这种配置也逐渐下放到民用车上。发展到今&#xff0c;车上的抬…

Day45 力扣动态规划 : 1143.最长公共子序列 |1035.不相交的线 | 53. 最大子序和

Day45 力扣动态规划 : 1143.最长公共子序列 &#xff5c;1035.不相交的线 &#xff5c; 53. 最大子序和 1143.最长公共子序列第一印象看完题解的思路实现中的困难感悟代码 1035.不相交的线第一印象感悟代码 53. 最大子序和第一印象dp递推公式初始化遍历顺序 实现中的困难感悟代…

面试分享 | 护网蓝队面试经验

关于蓝队面试经验 1.自我介绍能力 重要性 为什么将自我介绍能力放在第一位&#xff0c;实际上自我介绍才是面试中最重要的一点&#xff0c;因为护网面试并没有确定的题目&#xff0c;让面试官去提问 更多是的和面试官的一种 “交谈” &#xff0c;面试的难易程度也自然就取决…

C++ —— map 和 multimap

一、map 1.介绍 1. map是关联容器&#xff0c;它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元 素。 2. 在map中&#xff0c;键值key通常用于排序和惟一地标识元素&#xff0c;而值value中存储与此键值key关联的内容。键值key和值value的类型可能不同&am…

二十、泛型(5)

本章概要 边界通配符 编译器有多聪明逆变无界通配符捕获转换 边界 边界&#xff08;bounds&#xff09;在本章的前面进行了简要介绍。边界允许我们对泛型使用的参数类型施加约束。尽管这可以强制执行有关应用了泛型类型的规则&#xff0c;但潜在的更重要的效果是我们可以在…