【发布时间】:2022-01-12 01:21:56
【问题描述】:
我在 React 中有以下功能:
async function getImages() {
try {
const res = await axios.get(process.env.REACT_APP_SERVER + '/gallery')
if (res.status !== 304) await setImagesDATA(res.data) // imagesDATA is const[imagesDATA, setImagesDATA] = useState([])
} catch (error) {
console.log(error)
alert(error)
}
}
从我的快递服务器检索以下响应:
router.get('/', function(req, res, next) {
ftp.list(FTPPath, (error, list) => {
if (error) {
throw error
} else {
const files = list.map((item,i) => {
return(
{
id: i,
name: item.name,
path: FTPHost + item.name,
size: item.size
}
)
})
res.send(files)
}
ftp.end()
})
ftp.connect(FTPConfig)
});
使用以下方式触发:
useEffect(() => {
getImages();
}, [])
它在生产和本地都有效。
但我知道我的代码中存在问题,因为:
当我尝试使用useEffect(() => {getImages()}),而[]末尾没有空依赖数组时,代码在本地服务器上运行良好,但完全相同的代码在生产中在线崩溃,因为getImages()即使状态码为304也会触发重新渲染并且没有发生状态更改导致useEffect() 在无限循环中再次运行。我不明白为什么getImages() 即使没有任何变化也会触发重新渲染,更让我困惑的是为什么这不会发生在完全相同的本地环境中?单独的承诺会触发重新渲染吗?我应该如何正确实施?
【问题讨论】:
标签: node.js reactjs express react-hooks use-effect