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

上文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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Streamlit创建AutoGen用户界面

AutoGen作为一个最大化LLM(如GPT-4)能力的框架而脱颖而出。由微软研究院开发的AutoGen通过提供一种自动化、优化和编排工作流的方法&#xff0c;简化了复杂的、基于多代理llm的应用程序的创建。我们在以前的文章中也有过介绍&#xff0c;你可以与许多GPT交谈&#xff0c;并且GP…

STM32独立看门狗(IWDG)溢出时间计算

什么是IWDG&#xff1f; 独立看门狗(IWDG)由专用的低速时钟(LSI)驱动&#xff0c;即使主时钟发生故障它也仍然有效。 IWDG最适合应用于那些需要看门狗作为一个在主程序之外&#xff0c;能够完全独立工作&#xff0c;并且对时间精度要求较低的场合。 从上图我们可以看出IWDG的时…

每日一练 | 华为认证真题练习Day127

1、如图所示&#xff0c;关于OSPF的拓扑和配置&#xff0c;下列说法中正确的是&#xff08;&#xff09;。 A. R1与R2相比&#xff0c;R2更有机会成为DR&#xff0c;因为它的接口DR优先级值较小 B. 只要把R1的接口网络类型恢复为默认的广播类型&#xff0c;R1和R2即可建立稳定…

Netty入门指南之NIO 粘包与半包

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言问题产…

xcode SDK does not contain ‘libarclite‘

SDK does not contain libarclite at the path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a; try increasing the minimum deployment target解决方法 iOS13以上

多语言翻译软件 Mate Translate mac中文版特色功能

Mate Translate for Mac是一款多语言翻译软件&#xff0c;Mate Translate mac可以帮你翻译超过100种语言的单词和短语&#xff0c;使用文本到语音转换&#xff0c;并浏览历史上已经完成的翻译。你还可以使用Control S在弹出窗口中快速交换语言。 Mate Translate Mac版特色功能…

由于flutter_app依赖于flutter_swiper>=0.0.2,不支持零安全,版本解决失败。

参考 dart3.0使用flutter_swiper报错记录 flutter_swiper package - All Versions从官网的信息可以看到 Dart3版本不兼容 最小兼容的Dart SDK版本需要2.0 Flutter SDK 版本列表Flutter SDK 版本列表 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 说明&#xff1a;因…

骨传导运动蓝牙耳机推荐,这五款骨传导耳机不要错过!

骨传导耳机在这两年在运动圈中非常火热&#xff0c;相比传统耳机&#xff0c;骨传导耳机使用时开放双耳&#xff0c;不堵塞耳朵&#xff0c;解决了入耳式耳机佩戴的不适感。同时&#xff0c;也避免了戴耳机运动时耳内出汗带来的一系列卫生和健康问题。最关键的是通过耳骨传声&a…

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

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

高防CDN与高防服务器:谁更胜一筹?

在当今数字化世界中&#xff0c;网络安全对于保护网站和应用程序至关重要。在这一背景下&#xff0c;高防CDN和高防服务器是两种流行的解决方案&#xff0c;用于应对不同类型的网络攻击。本文将分析高防CDN是否能够替代高防服务器&#xff0c;以及它们各自的优势和限制。 高防C…

海思SD3403/SS928开发板 开发记录二: 设置网络 telnet连接开发板

1.设置网络 设置桥接网络 并修改虚拟机IP网段 问题1.参照前一篇博客 2.ping 测试 主机 虚拟机 板端 相互通信 3.telnet 登录板端

《泰山众筹火爆全网,小额投资也能成就泰山伟业》

众筹模式好做吗&#xff1f;我们可以看到电商行业内最先吃螃蟹的那几个众筹平台结局都不大体面。不是平台操盘手被抓&#xff0c;就是平台崩盘&#xff0c;总之&#xff0c;传统的众筹卖货模式的风险性已经深植人心。 众筹卖货真就那么难玩吗&#xff1f;其实并非如此&#xff…

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

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

【数据结构】链表经典OJ题,常见几类题型(一)

目录 题型一&#xff1a;反转单链表思路解析OJ题实例解题代码 题型二&#xff1a;快慢指针思路解析OJ题实例解题代码 两类题型的结合 题型一&#xff1a;反转单链表 思路解析 反转一个链表主要是想让第一个节点指向NULL&#xff0c;第二个节点指向第一个&#xff0c;以此类推。…

电影《二手杰作》观后感

上周看了电影《二手杰作》,在看电影的时候&#xff0c;自己感觉其实多少有些文艺范&#xff0c;或者有些尴尬的&#xff0c;但是在电影里还好&#xff0c;不过整个故事看下来&#xff0c;多少有点代入感&#xff0c;不多但还是有点。 故事情节&#xff0c;比较简单&#xff0c…

一文带您了解云渲染

很多刚刚接触云渲染的网友可能还不太了解云渲染&#xff0c;不知道云渲染是什么&#xff0c;不知道如何选择云渲染&#xff0c;不知道云渲染怎么收费&#xff0c;今天小编归纳总结了一些网友比较关心的问题&#xff0c;在本文中一一为大家解答。 云渲染是什么&#xff1f; 云…

kubectl 资源管理命令-陈述式

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

南昌大学漏洞报送证书

获取来源&#xff1a;edusrc&#xff08;教育漏洞报告平台&#xff09; url&#xff1a;https://src.sjtu.edu.cn/ 兑换价格&#xff1a;20金币 获取条件&#xff1a;南昌大学任意中危或以上级别漏洞

计讯物联高精度GNSS接收机:担当小型水库大坝安全监测解决方案的“护航者”

应用背景 水库大坝作为水利工程建筑物&#xff0c;承担着灌溉、发电、供水、生态等重任。一旦水库大坝发生安全事故&#xff0c;后果将不堪设想。因此&#xff0c;水库大坝的安全监测对保障水利工程顺利运行具有重要意义。 计讯物联作为水利行业专家型企业&#xff0c;多年来…

vxe-table表格校验失败后保持可以编辑状态

vxe-table表格校验失败后保持可以编辑状态 鼠标移出后可编辑状态消失 在edit-config设置为 autoClear: false 鼠标移出继续保持可编辑状态 <vxe-grid :edit-config"{trigger: dblclick, mode: row, showStatus: true, autoClear: false,activeMethod: activeRowMethod…