[英]how to display a random value from an array of objects in an React view
我创建了一个 REST API 并在 useEffect 钩子中获取数据。 我将这些数据存储在称为帖子的状态中,并希望显示该状态中的随机值并在有人单击按钮时显示。 每次用户单击按钮时,我都希望它显示不同的值。 一切正常,直到我第二次单击该按钮,然后它弹出一个错误,说帖子未定义。 下面是整个组件。 我需要帮助消除该错误,因为我希望每次用户单击按钮时都会出现一个新帖子。
import React, { useEffect, useState } from "react";
import "./App.css";
function App() {
const [posts, setPosts] = useState([]);
useEffect(() => {
const fetchPosts = async () => {
try {
const fetchingPosts = await fetch("http://localhost:5000/posts");
const posts = await fetchingPosts.json();
setPosts(posts);
} catch (err) {
console.log(err);
}
};
fetchPosts();
}, []);
const handleClick = () => {
const random = posts[Math.floor(Math.random() * posts.length)];
setPosts(random);
};
console.log(posts);
return (
<div>
<button onClick={handleClick}>Click me</button>
<span>{posts.quote}</span>
</div>
);
}
export default App;
您已经将 post 初始化为包含 n 个不同帖子的对象数组
将其值重新分配给handleClick
内的一个帖子将导致posts
失去其初始状态
所以只需创建另一个钩子,它最初是一个空字符串,每次点击后都会从数组posts
获得一个不同的随机帖子!
像这样的东西:
import React, { useEffect, useState } from "react";
import "./App.css";
function App() {
const [posts, setPosts] = useState([]);
const [onePost, setOnePost] = useState(''); //one more hook for storing current random post
useEffect(() => {
const fetchPosts = async () => {
try {
const fetchingPosts = await fetch("http://localhost:5000/posts");
const posts = await fetchingPosts.json();
setPosts(posts);
} catch (err) {
console.log(err);
}
};
fetchPosts();
}, []);
const handleClick = () => {
const random = posts[Math.floor(Math.random() * posts.length)];
setOnePost(random);//value assigned here
};
console.log(posts);
return (
<div>
<button onClick={handleClick}>Click me</button>
<span>{onePost.quote}</span> //print onePost instead of Post
</div>
);
}
export default App;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.