javascript - ReactJS:结合来自 get 请求的 2 个 JSON 响应
问题描述
所以,我有这段代码可以返回所有可以从端点检索到的数据。我的端点有分页:它每页只显示 10 个数据。所以我的第一个端点:Link + "api/materials/?page=" + page;
where page = 1
,返回前 10 个数据。然后我有第二页,所以 for 循环现在将Link + "api/materials/?page=" + page;
在哪里运行page = 2
并将返回一组不同的数据。我想要发生的是,两个端点的所有结果都将同时显示,如果我的第一个端点有 10 个数据,第二次运行端点有 6 个数据,我希望能够在我的桌子。现在会发生什么就是说,当循环开始并运行第一个端点时,它会显示第1页的所有数据,然后当它再次循环并运行第2页时,第1页的数据将被第2页替换。我想结合第 1 页和第 2 页的数据。
请帮我。
import React, {Component} from 'react';
import { Table } from 'semantic-ui-react'
import Link from './Link';
import axios from 'axios';
import _ from 'lodash';
class Material extends Component {
constructor(props){
super(props);
this.state={
materials: []
}
}
componentDidMount() {
const token = localStorage.getItem('jwt');
const total = localStorage.getItem('totalpage');
var page;
for (page = 1; page <= total ; page++) {
const apiBaseUrl = Link + "api/materials/?page=" + page;
const config = {
headers: {
'Authorization': "bearer " + token,
'Accept': 'application/json',
'Content-Type': 'application/json',
}
}
axios.get(apiBaseUrl, config)
.then((response) => {
console.log(response.data);
this.setState({
materials: response.data
})
})
}
}
render() {
const { materials } = this.state;
let returndata = _.isEmpty(materials) ? [] : materials.data
return (
<div className="ui container">
<br />
<br />
<Table fixed>
<Table.Header>
<Table.Row>
<Table.HeaderCell>UUID</Table.HeaderCell>
<Table.HeaderCell>Title</Table.HeaderCell>
<Table.HeaderCell>Description</Table.HeaderCell>
</Table.Row>
</Table.Header>
<Table.Body>
{returndata.map((item, i) => {
return (
<Table.Row key = {i}>
<Table.Cell>{item.uuid}</Table.Cell>
<Table.Cell>{item.title}</Table.Cell>
<Table.Cell>{item.description}</Table.Cell>
</Table.Row>
)
})}
</Table.Body>
</Table>
</div>
);
}
}
export default Material;
解决方案
那是因为您将materials
状态中的对象替换为新返回的数据。
调用一些函数来更新你的状态。
axios.get(apiBaseUrl, config)
.then((response) => {
console.log(response.data);
this.updateMaterials(response.data);
})
现在将该函数中的状态更新为首先检索旧列表,然后将新列表连接到其中,然后将其存储到您的状态。
updateMaterials = (data) => {
let updatedList = this.state.materials.slice();
updatedList = updatedList.concat(data);
this.setState({materials: updatedList});
}
也
data
从材料中移除。
改变
let returndata = _.isEmpty(materials) ? [] : materials.data
至
let returndata = _.isEmpty(materials) ? [] : materials
推荐阅读
- cmake - Bincrafters 模块化柯南包和 cmake_find_package 生成器
- android - 为什么我的模拟器上看不到 XML 元素?
- react-native - refetchQueries 在反应本机应用程序中不起作用
- security - 如何在客户端处理刷新和身份验证令牌?(存放地点)
- php - CodeIgniter 获取另一个数据库的视图表
- php - 使用 cUrl 和 web3.php 进行以太坊交易,我收到了收据,但交易未发送到网络
- javascript - React-flexbox-grid:客户端和服务器之间的 Prop `className` 不匹配
- java - Jax rs 通用异常
- c# - 我想在与尖刺碰撞后将播放器发送到重新启动屏幕
- javascript - 如何在全屏时更改 HTML5 页面