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

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

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

相关文章

vue:写一个数组box和list数组,在保留box数组中原有对象的同时,将list数组中每一个对象插入到box数组后面

前言&#xff1a;由于源码涉及到后端调用数据和一些无关的功能所以我就专门针对这个功能的代码&#xff0c;这样好方便理解。 1、在data中定义两个数组&#xff1a;box和list&#xff0c;并给它们初始化值 data() {return {box: [/*初始的box数组对象*/],list: [/*初始的list…

k8s----27、云原生存储StorageClass、CSI、Rook

1、动态存储介绍 StorageClass:存储类,由K8s管理员创建,用于动态PV的管理,可以链接至不同的后端存储, 比如Ceph、GlusterFS等。之后对存储的请求可以指向StorageClass,然后StorageClass会自动 的创建、删除PV。 实现方式: in-tree: 内置于K8s核心代码,对于存储的管理,都…

华为OD机试 - 无重复字符的最长子串(Java JS Python C)

目录 题目描述 示例 提示 题目解析 Java算法源码 JS算法源码 Python算法源码

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

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

配置资源管理

Secret Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源&#xff0c;这类数据虽然也可以存放在 Pod 或者镜像中&#xff0c;但是放在 Secret 中是为了更方便的控制如何使用数据&#xff0c;并减少暴露的风险。 三种类型&#xff1a; kubernetes.io/service-accoun…

kubeadm安装k8s高可用集群

目录 一、环境规划&#xff1a; 二、注意事项&#xff1a; 三、环境准备&#xff1a; 1. 关闭防火墙规则&#xff0c;关闭selinux&#xff0c;关闭swap交换&#xff1a; 2. 修改主机名&#xff1a; 3. 有节点修改hosts文件&#xff1a; 4. 所有节点时间同步&#xff1a; 5. 所…

【星海出品】flask (二) request替代VUE测试flask接口

flask 是一门使用 python 编写的后端框架。 VUE前端UI装饰推荐学习Element组件库 之后就不使用UI去测试flask了,环节太多,影响直观反映,直接使用postman或request测试更加直观. url携带参数 app.route(/my/blog/<blog_id>)def blog_detail(blog_id): # put applicatio…

c++ 中 const 和static

1. static 首先使用static的主要目的是控制存储周期&#xff0c; 链接性 和可见性 可以作为 1. 局部变量 2.类成员 3. 全局变量和函数 2. const const 关键字用于声明一个变量为常量&#xff0c; 一旦初始化之后&#xff0c;它的值就不会被改变 。 2.1 常量表达式 声明为c…

CF1781F Bracket Insertion(2700*) 题解(括号匹配DP)

题目 题面 简要题意&#xff1a; 你需要执行一下步骤 n n n 次来构建括号序列&#xff1a; ⋅ \cdot ⋅ 等概率选择一个空位&#xff08;若当前有 k k k 个字符&#xff0c;则有 k 1 k 1 k1 个空位&#xff09;。 ⋅ \cdot ⋅ 以 p p p 的概率插入字符…

2023.10月考试战报|华为认证HCIP考试100%通过

相关文章&#xff1a; 考试战报|2023.7月-8月思科认证、华为认证-CSDN博客 2023.4月及5月最新HCIP 考试战报来袭_厦门微思网络的博客-CSDN博客 HCIP 3-4月考试战报_厦门微思网络的博客-CSDN博客 2023年HCIP/CCNP考试战报_厦门微思网络的博客-CSDN博客 2023年10月&#xff0…

卸载QQ后聊天记录怎么恢复?这3个有效方法送给大家!

近年来&#xff0c;微信崛起&#xff0c;已经逐渐占据了人们的日常生活&#xff0c;成为大家不可或缺的东西。这也导致了如今使用QQ的用户变得越来越少。如果用户使用QQ的频率比较低&#xff0c;那么他们可能会选择卸载QQ以此来节省手机空间。 一旦将QQ卸载&#xff0c;这意味…

集合贴3——智能客服系统

基础课17——智能客服系统-CSDN博客文章浏览阅读56次。近年来&#xff0c;实体客服机器人开始出现在银行办公厅、电信商务厅等场合&#xff0c;形成了网络智能客服、电话智能客服、实体客服机器人综合智能客服系统&#xff0c;这初步形成了一种新的产业形式。https://blog.csdn…

电汇ABC(2023-10)

目录 基本表单费用承担方式汇款人姓名(拼音)汇款人地址收款人姓名收款人账号收款人地址(及国家/地区)收款行SWIFT 代码收款行名称、地址申报信息 相关汇款时效汇出审核关于汇往境外他人账户 费用钞转汇 其他其他方式个人购汇额度美元现钞存取额度破损美元境内外币转账美元 OR 港…

强化您的应用安全,从app加固开始

强化您的应用安全&#xff0c;从app加固开始 目录 强化您的应用安全&#xff0c;从app加固开始 摘要 引言 1. 加密和数据保护 2. 代码混淆 3. 防止反编译 4. 安全测试 5. 更新和补丁 6. 权限控制 7. 输入验证和输出过滤 8. 日志记录和监控 9. 安全设计和架构 10.…

Python 函数定义详解(More on Defining Functions)- 默认参数/位置参数/关键字参数

1.函数的定义和调用方法 1.1函数定义方法 """def 关键字用来定义一个函数。function_name 是函数名&#xff0c;应遵循命名规范。parameter1, parameter2, ... 是函数的参数列表&#xff0c;可以是任意数量和类型的参数。函数体是用缩进&#xff08;通常为4个…

Cesium 相机设置

1.setView 直接跳转到目的地 // 设置相机位置 const position Cesium.Cartesian3.fromDegrees(113, 31, 20000); // setView通过定义相机目的地&#xff08;方向&#xff09;,直接跳转到目的地 viewer.camera.setView({ destination: position, // 位置设置 orientation: { //…

基于SSM的二手车交易网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

华为开源carbondata中的使用问题处理

carbondata中的使用问题处理 Q&#xff1a;什么是不良记录&#xff1f; A&#xff1a;由于数据类型不兼容而无法加载到CarbonData中的记录或为空或具有不兼容格式的记录被归类为不良记录。 Q&#xff1a;CarbonData中的不良记录存储在哪里&#xff1f; A&#xff1a;不良记录…

代码随想录day2

目录 vscode 自定义代码模板Reference vscode 自定义代码模板 select User snippets from Settings on the bottom left corner. select a certain language for example: cpp create your own snippets 格式如下&#xff0c;防着写 第一行"cpp template",模板…

【Web安全】CORS跨域资源共享漏洞

文章目录 前言一、漏洞概述二、漏洞原理三、CORS响应头类型四、漏洞挖掘五、修复建议前言 本篇文章主要介绍CORS跨域漏洞产生的原理,漏洞复现过程,挖掘手段以及如何进行修复,文章难免会有失误,烦请留下宝贵建议,谢谢! 一、漏洞概述 跨域资源共享(CORS)是一种浏览器机制…