为什么 API 数据没有传输到我的其他模块?反应
Why is the API data not transferring to my other module? React
对于这个项目,我试图传输我从 API(相册列表)收到的数据,并将它们发送到另一个模块,以便根据哪个用户显示结果选择。我将“useEffect()”与“setAlbums()”函数结合使用,通过标有“album”的道具设置和发送专辑列表数据。问题是我没有收到另一个模块“AlbumList.js”中的数据,所以我无法显示用户的专辑列表。任何人都可以找到解决方案吗?请原谅所有日志,我是 React 的新手,一直在努力解决这个问题。非常感谢您抽出宝贵时间。
这是 App.js 文件:
// App.js
import "./App.css";
import AlbumList from "./AlbumList";
import UserList from "./UserList";
function App() {
const controller = new AbortController();
const [users, setUsers] = useState([]);
const [user, setCurrentUser] = useState({});
const [albums, setAlbums] = useState([]);
document.title = 'Awesome Album App';
const userUrl = "https://jsonplaceholder.typicode.com/users";
// Loading Albums
useEffect(() => {
const albumUrl = `https://jsonplaceholder.typicode.com/albums?userId=${user.id}`;
async function loadAlbums() {
try {
const response = await fetch(albumUrl, { signal: controller.signal });
const json = await response.json();
console.log("Logging json: ", json)
setAlbums(json)
} catch (err) {
if (err.name === 'AbortError') {
console.log('Aborted', err)
} else {
throw err;
}
}
}
loadAlbums();
console.log("After loadAlbums: ", albums)
return () => {
controller.abort();
}
},[user])
// Loading Users
useEffect(() => {
async function loadUser() {
try {
const response = await fetch(userUrl, { signal: controller.signal });
const data = await response.json();
setUsers(...users, data);
} catch (err) {
if (err.name === 'AbortError') {
console.log('Aborted', err)
setUsers([])
} else {
throw err;
}
}
}
loadUser();
return () => {
controller.abort();
}
},[])
// Return JSX
return (
<div className="App">
<div className="left column">
<UserList users={users} setCurrentUser={setCurrentUser} />
</div>
<div className="right column">
<AlbumList user={user} album={album} />
</div>
</div>
);
}
export default App;
这是显示相册的组件:
// AlbumList.js
import React from "react";
function AlbumList({ user = {} }, albums) {
console.log("Logging inside of albumsList", albums)
if (albums.length) {
return albums.map((album, index) => {
return <li key={index}>{album.id}{album.title}</li>;
});
}
return (
<div>
<p>Please click on a user name to the left</p>
</div>
);
}
export default AlbumList;```
是否因为您将 album={album}
传递给 <AlbumList />
组件,而它应该是 albums={albums}
?我不确定这是否只是您将代码传输到 Stack Overflow 时的一个错误,但是 <AlbumList/>
需要一个 albums
的道具,而您传递了一个 album
道具。不过,我很好奇为什么编译器没有为未定义 album
抛出错误 - 据我所知,您只定义了 albums
变量。另外,我相信你需要像这样
解构 AlbumList.js 中的道具
function AlbumList({ user = {} , albums}) {
(即 }
应该出现在 albums
属性之后)。
对于这个项目,我试图传输我从 API(相册列表)收到的数据,并将它们发送到另一个模块,以便根据哪个用户显示结果选择。我将“useEffect()”与“setAlbums()”函数结合使用,通过标有“album”的道具设置和发送专辑列表数据。问题是我没有收到另一个模块“AlbumList.js”中的数据,所以我无法显示用户的专辑列表。任何人都可以找到解决方案吗?请原谅所有日志,我是 React 的新手,一直在努力解决这个问题。非常感谢您抽出宝贵时间。
这是 App.js 文件:
// App.js
import "./App.css";
import AlbumList from "./AlbumList";
import UserList from "./UserList";
function App() {
const controller = new AbortController();
const [users, setUsers] = useState([]);
const [user, setCurrentUser] = useState({});
const [albums, setAlbums] = useState([]);
document.title = 'Awesome Album App';
const userUrl = "https://jsonplaceholder.typicode.com/users";
// Loading Albums
useEffect(() => {
const albumUrl = `https://jsonplaceholder.typicode.com/albums?userId=${user.id}`;
async function loadAlbums() {
try {
const response = await fetch(albumUrl, { signal: controller.signal });
const json = await response.json();
console.log("Logging json: ", json)
setAlbums(json)
} catch (err) {
if (err.name === 'AbortError') {
console.log('Aborted', err)
} else {
throw err;
}
}
}
loadAlbums();
console.log("After loadAlbums: ", albums)
return () => {
controller.abort();
}
},[user])
// Loading Users
useEffect(() => {
async function loadUser() {
try {
const response = await fetch(userUrl, { signal: controller.signal });
const data = await response.json();
setUsers(...users, data);
} catch (err) {
if (err.name === 'AbortError') {
console.log('Aborted', err)
setUsers([])
} else {
throw err;
}
}
}
loadUser();
return () => {
controller.abort();
}
},[])
// Return JSX
return (
<div className="App">
<div className="left column">
<UserList users={users} setCurrentUser={setCurrentUser} />
</div>
<div className="right column">
<AlbumList user={user} album={album} />
</div>
</div>
);
}
export default App;
这是显示相册的组件:
// AlbumList.js
import React from "react";
function AlbumList({ user = {} }, albums) {
console.log("Logging inside of albumsList", albums)
if (albums.length) {
return albums.map((album, index) => {
return <li key={index}>{album.id}{album.title}</li>;
});
}
return (
<div>
<p>Please click on a user name to the left</p>
</div>
);
}
export default AlbumList;```
是否因为您将 album={album}
传递给 <AlbumList />
组件,而它应该是 albums={albums}
?我不确定这是否只是您将代码传输到 Stack Overflow 时的一个错误,但是 <AlbumList/>
需要一个 albums
的道具,而您传递了一个 album
道具。不过,我很好奇为什么编译器没有为未定义 album
抛出错误 - 据我所知,您只定义了 albums
变量。另外,我相信你需要像这样
function AlbumList({ user = {} , albums}) {
(即 }
应该出现在 albums
属性之后)。