【发布时间】:2021-03-18 23:51:12
【问题描述】:
我正在尝试显示这两个数组。每次单击该按钮时,都会生成一个新用户并将其添加到数组中。我想让它渲染整个数组,而不仅仅是最新的行。我已经尝试了很多东西。我一直在网上看到有关地图的信息,但我无法让其中任何一项正常工作。
import React from "react";
import ReactDOM from "react-dom";
import $ from "jquery";
var personlist = [];
var imglist = [];
var i = 0;
class People extends React.Component {
constructor(props) {
super(props);
this.state = {
name: "firstlastname",
image: "image"
};
}
static getDerivedStateFromProps(props, state) {
getUser = () => {
var usersname;
var thumbnail;
$.ajax({
url: "https://randomuser.me/api/?inc=name,picture",
data: "json",
async: false,
success: function (data) {
usersname = JSON.stringify(
data.results[0].name.first + " " + data.results[0].name.last
);
thumbnail = JSON.stringify(data.results[0].picture.thumbnail);
newUser = usersname;
newImage = thumbnail;
var eventstring = new String(); //remove quotes from image string
eventstring = newImage.toString().replace(/"/g, ""); //remove quotes from image string
personlist.push([newUser, eventstring]);
imglist.push([eventstring]);
console.log(personlist);
},
error: function (errormsg) {
console.log(errormsg);
}
});
};
this.getUser();
var eventstring = new String(); //remove quotes from image string
eventstring = newImage.toString().replace(/"/g, ""); //remove quotes from image string
return { name: newUser, image: eventstring };
}
changeColor = () => {
//change state to rerender
this.setState({ name: "updt" });
i++;
return { name: "updt" };
};
render() {
return (
<div>
<button onClick={this.changeColor}>Generate New Person</button>
<div>
<h1>{personlist[i][0]}</h1>
<img src={personlist[i][1]} alt="none" />
</div>
</div>
);
}
}
export default People;
【问题讨论】:
-
首先你必须了解 react 组件,如果你想存储类似从 fetch 获得的结果,你可以将它存储在组件的状态中,而不是存储在状态之外的变量中。从表面上看,你并不了解 React 组件或基于类的组件。
-
另外,如果你想渲染数组中的所有用户,你必须在渲染函数中明确定义这个。请阅读有关 JSX 的概念以及如何使用
Array.map()实现此类功能。
标签: javascript arrays reactjs render