reactjs - React - 显示帖子详细信息
问题描述
我创建了页面来显示帖子详细信息。我可以在控制台中看到所有正确的数据,但页面上没有呈现任何内容。我究竟做错了什么?
import React, { useState, useEffect } from "react";
function ProductDetail({ match }) {
useEffect(() => {
fetchItem();
console.log(match);
}, []);
const [item, setItem] = useState({});
const fetchItem = async () => {
const data = await fetch(`http://amb.local/posts/${match.params.id}`);
const item = await data.json();
console.log(item);
setItem(item);
};
return (
<div>
<h2>Post detail</h2>
<h3>
{item.title}
</h3>
</div>
);
}
export default ProductDetail;
解决方案
您应该尝试让详尽的 deps为您的开发环境工作,因为现在您的效果缺少您显然不知道的依赖项。修复依赖关系会导致 ProductDetail 每次都重新渲染。
这是一个如何做到这一点的示例:
function ProductDetail({ match }) {
const [item, setItem] = React.useState({});
React.useEffect(() => {
fetch(
`https://jsonplaceholder.typicode.com/todos/${match}`
)
.then(response => response.json())
.then(todo => setItem(todo));
}, [match]);
return (
<div>
<h2>Post detail for {item.id}</h2>
<h3>{item.title}</h3>
</div>
);
}
const ProductSelector = () => {
const [selected, setSelected] = React.useState(1);
return (
<div>
<select
value={selected}
onChange={e => setSelected(e.target.value)}
>
{[1, 2, 3, 4, 5, 6].map(id => (
<option key={id} value={id}>
{id}
</option>
))}
</select>
<ProductDetail match={selected} />
</div>
);
};
ReactDOM.render(
<ProductSelector />,
document.getElementById('root')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="root"></div>
推荐阅读
- c# - 如何在不使用 goto 的情况下返回代码中的特定点?
- python - 移位以获得 128 位产品
- laravel - Laravel - 是否有任何刀片指令来检查变量是否存在并设置为特定值?
- design-patterns - 用点 lua 分割字符串
- java - 使用多线程系统监视 Zookeeper 上的多个节点
- mongodb-query - 如何在 mongoDB 的 $in 运算符中嵌套 $type
- codeception - Codeception seeInDatabase() 未按预期工作
- javascript - 如何在特定时间内执行 mocha 测试套件
- php - php通过其键访问多维数组的特定位置并设置它
- javascript - 在 Svelte 中传递道具