如何从动态 Table 访问数据
How to access data from a dynamic Table
目前正在学习编码,我在这里做了一些工作...
使用 MongoDB 我将一些数据(交易)硬编码到前端的 table 中。
除此之外,我创建了一个名为 TransactionItems 的 js 文件,并像这样列出了感兴趣的属性。
import React from 'react';
import {Badge} from "reactstrap";
const TransactionItem = props =>{
return (
<>
<td>{props.transaction.date}</td>
<td> {props.transaction.amount}</td>
<td>{props.transaction.token}</td>
<td>{props.transaction._id}</td>
<td className="text-right"><Badge color="warning" >
View
</Badge>
</td>
</>
)
}
export default TransactionItem;
我还创建了一个连接到我的后端的服务
getTransactions : ()=>{
return fetch('/user/transactions')
.then(response=>{
if(response.status !== 401){
return response.json().then(data => data);
}
else
return {message : {msgBody : "UnAuthorized",msgError : true}};
});
},
然后在我的仪表板上,我用这样的数据填充了一个 table
import React, {useEffect, useState} from 'react';
import TransactionItem from '../views/TransactionItems';
import TransactionService from '../Services/TransactionService';
import { Col, Row, Card, CardTitle, CardText, CardBody, CardFooter, CardHeader, Button, Table } from 'reactstrap';
const Dashboard = props=>{
const [user,setUser] = useState([]);
const [transactions,setTransactions] = useState([]);
useEffect(()=>{
TransactionService.getTransactions().then(data =>{
setTransactions(data.transactions);
});
},[]);
return (
<>
<Table responsive>
<thead className=" text-warning">
<tr>
<th>
Date
</th>
<th>
Amount
</th>
<th>
Token
</th>
<th>
Receipt No
</th>
<th className="text-right">
Action
</th>
</tr>
</thead>
<tbody>
{
transactions.map(transaction =>{
return (<tr><TransactionItem key={transaction._id} transaction={transaction} loading={loading}/>
</tr>)
})
}
</tbody>
</Table>
</>
);
}
export default Dashboard;
填充后看起来像这样
我为每笔交易创建了收据样本
import React, {useEffect, useState}from 'react';
import {Row, Container} from "reactstrap";
import AuthService from '../Services/AuthService';
import TransactionService from '../Services/TransactionService';
function Receipt(props) {
const [user,setUser] = useState([]);
const [transaction,setTransaction] = useState();
const id = '';
useEffect(()=>{
AuthService.isAuthenticated().then(data =>{
setUser(data.user);
});
},[]);
useEffect(()=>{
TransactionService.getTransaction(id).then(data =>{
console.log(data);
setTransaction(data.transaction);
});
},[id]);
return (
<div>
<>
<div style={{color: 'RGB(128, 128, 128)', fontSize: '1rem',
fontWeight: '600',
textAlign: 'left',
justifyContent: 'center',
alignContent: 'center'}}>Token Credit:</div>
</>
</div>
);
}
export default Receipt;
并在后端创建路由以使用交易 _id 访问每个交易对象。我试图通过在前端为此创建一个服务来执行它
getTransaction : (id)=>{
return fetch('/user/'+id)
.then(response=>{
console.log(response.data);
if(response.status !== 401){
return response.json().then(data => data);
}
else
return {message : {msgBody : "UnAuthorized",msgError : true}};
});
},
}
当使用已知的 transaction_id 进行测试时,它起作用了(我控制台记录了响应)。但我不确定如何为 table 上的每笔交易传递 _id,以便在单击查看按钮时打开收据页面并将收据页面上的状态 ID 设置为 transaction_id事务对象,使用 UseEffect。
任何指针都将是最有帮助的。谢谢
嗨,
您可以将 _id 传递给本地存储。在视图中单击操作,将 _id 信息保存在本地存储中并重定向到收据页面。在收据页面中,像这样从本地存储中获取 _id。
// setter
localStorage.setItem('myData', data);
// getter
localStorage.getItem('myData');
// remove
localStorage.removeItem('myData');
现在看这个例子:
import React, { Component } from 'react'
class Table extends Component {
constructor(props) {
super(props)
this.state = {
students: [
{ id: 1, name: 'Wasif', age: 21, email: 'wasif@email.com' },
{ id: 2, name: 'Ali', age: 19, email: 'ali@email.com' },
{ id: 3, name: 'Saad', age: 16, email: 'saad@email.com' },
{ id: 4, name: 'Asad', age: 25, email: 'asad@email.com' }
]
}
}
viewRow(id,e) {
alert('selectedId:'+ id);
localStorage.setItem('transactionId',id);
}
renderTableData() {
return this.state.students.map((student, index) => {
const { id, name, age, email } = student //destructuring
return (
<tr key={id}>
<td>{id}</td>
<td>{name}</td>
<td>{age}</td>
<td>{email}</td>
<td><button onClick={(e) => this.viewRow(id, e)}>View</button></td>
</tr>
)
})
}
render() {
return (
<div>
<h1 id='title'>React Dynamic Table</h1>
<table id='students'>
<tbody>
{this.renderTableData()}
</tbody>
</table>
</div>
)
}
}
export default Table;
我在 table 中添加了视图按钮,还添加了 viewRow 方法。单击按钮时,我获取 selectedRow id 并保存在本地存储中。
这里是有效的解决方案
第一步
引入 useHistory 钩子
import { useHistory} from 'react-router-dom';
步骤 2
在 TransactionItem 对象中定义历史记录。
let history = useHistory();
步骤 3
还在内部 TransactionItem 对象中定义 viewRow。
const viewRow = (e) =>{
e.preventDefault();
history.push('/receipt/'+ props.transaction._id);
};
目前正在学习编码,我在这里做了一些工作...
使用 MongoDB 我将一些数据(交易)硬编码到前端的 table 中。
除此之外,我创建了一个名为 TransactionItems 的 js 文件,并像这样列出了感兴趣的属性。
import React from 'react';
import {Badge} from "reactstrap";
const TransactionItem = props =>{
return (
<>
<td>{props.transaction.date}</td>
<td> {props.transaction.amount}</td>
<td>{props.transaction.token}</td>
<td>{props.transaction._id}</td>
<td className="text-right"><Badge color="warning" >
View
</Badge>
</td>
</>
)
}
export default TransactionItem;
我还创建了一个连接到我的后端的服务
getTransactions : ()=>{
return fetch('/user/transactions')
.then(response=>{
if(response.status !== 401){
return response.json().then(data => data);
}
else
return {message : {msgBody : "UnAuthorized",msgError : true}};
});
},
然后在我的仪表板上,我用这样的数据填充了一个 table
import React, {useEffect, useState} from 'react';
import TransactionItem from '../views/TransactionItems';
import TransactionService from '../Services/TransactionService';
import { Col, Row, Card, CardTitle, CardText, CardBody, CardFooter, CardHeader, Button, Table } from 'reactstrap';
const Dashboard = props=>{
const [user,setUser] = useState([]);
const [transactions,setTransactions] = useState([]);
useEffect(()=>{
TransactionService.getTransactions().then(data =>{
setTransactions(data.transactions);
});
},[]);
return (
<>
<Table responsive>
<thead className=" text-warning">
<tr>
<th>
Date
</th>
<th>
Amount
</th>
<th>
Token
</th>
<th>
Receipt No
</th>
<th className="text-right">
Action
</th>
</tr>
</thead>
<tbody>
{
transactions.map(transaction =>{
return (<tr><TransactionItem key={transaction._id} transaction={transaction} loading={loading}/>
</tr>)
})
}
</tbody>
</Table>
</>
);
}
export default Dashboard;
填充后看起来像这样
我为每笔交易创建了收据样本
import React, {useEffect, useState}from 'react';
import {Row, Container} from "reactstrap";
import AuthService from '../Services/AuthService';
import TransactionService from '../Services/TransactionService';
function Receipt(props) {
const [user,setUser] = useState([]);
const [transaction,setTransaction] = useState();
const id = '';
useEffect(()=>{
AuthService.isAuthenticated().then(data =>{
setUser(data.user);
});
},[]);
useEffect(()=>{
TransactionService.getTransaction(id).then(data =>{
console.log(data);
setTransaction(data.transaction);
});
},[id]);
return (
<div>
<>
<div style={{color: 'RGB(128, 128, 128)', fontSize: '1rem',
fontWeight: '600',
textAlign: 'left',
justifyContent: 'center',
alignContent: 'center'}}>Token Credit:</div>
</>
</div>
);
}
export default Receipt;
并在后端创建路由以使用交易 _id 访问每个交易对象。我试图通过在前端为此创建一个服务来执行它
getTransaction : (id)=>{
return fetch('/user/'+id)
.then(response=>{
console.log(response.data);
if(response.status !== 401){
return response.json().then(data => data);
}
else
return {message : {msgBody : "UnAuthorized",msgError : true}};
});
},
}
任何指针都将是最有帮助的。谢谢
嗨,
您可以将 _id 传递给本地存储。在视图中单击操作,将 _id 信息保存在本地存储中并重定向到收据页面。在收据页面中,像这样从本地存储中获取 _id。
// setter
localStorage.setItem('myData', data);
// getter
localStorage.getItem('myData');
// remove
localStorage.removeItem('myData');
现在看这个例子:
import React, { Component } from 'react'
class Table extends Component {
constructor(props) {
super(props)
this.state = {
students: [
{ id: 1, name: 'Wasif', age: 21, email: 'wasif@email.com' },
{ id: 2, name: 'Ali', age: 19, email: 'ali@email.com' },
{ id: 3, name: 'Saad', age: 16, email: 'saad@email.com' },
{ id: 4, name: 'Asad', age: 25, email: 'asad@email.com' }
]
}
}
viewRow(id,e) {
alert('selectedId:'+ id);
localStorage.setItem('transactionId',id);
}
renderTableData() {
return this.state.students.map((student, index) => {
const { id, name, age, email } = student //destructuring
return (
<tr key={id}>
<td>{id}</td>
<td>{name}</td>
<td>{age}</td>
<td>{email}</td>
<td><button onClick={(e) => this.viewRow(id, e)}>View</button></td>
</tr>
)
})
}
render() {
return (
<div>
<h1 id='title'>React Dynamic Table</h1>
<table id='students'>
<tbody>
{this.renderTableData()}
</tbody>
</table>
</div>
)
}
}
export default Table;
我在 table 中添加了视图按钮,还添加了 viewRow 方法。单击按钮时,我获取 selectedRow id 并保存在本地存储中。
这里是有效的解决方案
第一步 引入 useHistory 钩子
import { useHistory} from 'react-router-dom';
步骤 2 在 TransactionItem 对象中定义历史记录。
let history = useHistory();
步骤 3 还在内部 TransactionItem 对象中定义 viewRow。
const viewRow = (e) =>{
e.preventDefault();
history.push('/receipt/'+ props.transaction._id);
};