【发布时间】:2020-09-29 03:20:20
【问题描述】:
我的 React 应用程序中有一些硬编码数据,现在我想从 API 中获取这些数据。我想保留类似数组的格式,因为这就是未来使用数据的方式。
我原来的组件:
import moment from 'moment';
const INITIAL_STATE = {
articles:
[
{
title: 'Guerrilla Public Service Redux (2017)',
tag0: 'story',
points: 421,
created_at: moment('2020-05-27T16:05:32.000Z'),
author: 'DerWOK',
},
{
title: 'Build Yourself a Redux',
tag0: 'story',
points: 395,
created_at: moment('2020-05-27T16:05:32.000Z'),
author: 'jdeal',
},
],
};
function Articles (state = INITIAL_STATE) {
return state;
}
export default Articles;
这就是我想象的工作方式,但下面的 return() 中应该是什么对我来说是个谜:
import moment from 'moment';
function Articles() {
const [error, setError] = useState(null);
const [isLoaded, setIsLoaded] = useState(false);
const [items, setItems] = useState([]);
useEffect(() => {
fetch("https://hn.algolia.com/api/v1/search?query=redux")
.then(res => res.json())
.then(
(result) => {
setIsLoaded(true);
setItems(result.items);
},
(error) => {
setIsLoaded(true);
setError(error);
}
)
}, [])
if (error) {
return <div>Error: {error.message}</div>;
} else if (!isLoaded) {
return <div>Loading...</div>;
} else {
return (
{items.map(item => (
???)
);
}
}
export default Articles;
编辑:我确实有列表组件来呈现数据。我只需要以可接受的形式返回数据。
【问题讨论】:
-
这能回答你的问题吗? React.js create loop through Array
-
你不是想让你的钩子返回一个数组,
Fetch(在你的代码中)是一个功能组件,而不是一个钩子。如果您的问题是???,那么您只是试图将一个数组呈现为 JSX 元素。请查看建议的副本。 -
您的
result.item维护着类似数组的结构。如果您正在谈论将数组结构向下传递给孩子,您可以简单地做到这一点return (<SomeComponent itemList={items} />)而不使用items.map -
但是你在做的不是一个钩子,就像提到的@zero298。您的退货声明与 ???是渲染的返回值,而不是任何其他值。
-
@habr 所以你的方法是错误的,因为你在其他 if 块上返回 JSX。主要问题是你为什么想要一个钩子来做这个,因为我不确定。如果你能回答这个问题,我们可以帮你创建一个合适的钩子(useGetArticles)
标签: arrays reactjs react-hooks