【发布时间】:2021-07-03 07:54:39
【问题描述】:
发送请求时,在 Chrome 中重新加载页面时响应始终相同,但在 FireFox 中是随机的(应该如此)。页面重新加载后,按钮单击数据始终相同。 我想在每个按钮单击时发出请求,以在状态挂钩中存储不同的数据。
我也在vanilla js中尝试过,响应也是一样的。
是什么导致数据在请求时始终相同而不是随机的? 我会将之前获取的数据存储在状态中,但首先必须弄清楚为什么它总是一样,我会很感激任何帮助,因为我是这些 api 调用的新手,并且也会做出反应。
App.js:
import FetchColor from './common/FetchColor';
import ColorList from './components/ColorList';
import { useEffect, useState } from 'react';
function App() {
const [colorData, changeColor] = useState('');
const changeColorHandler = () => {
FetchColor(changeColor);
};
useEffect(() => {
FetchColor(changeColor);
}, []);
return (
<div className='App'>
<button onClick={changeColorHandler}>
{colorData ? colorData.tags[0].name : 'Change Color'}
</button>
<ColorList color={colorData} />
</div>
);
}
export default App;
FetchColor.js:
const FetchColor = async (changeColor) => {
const response = await fetch('https://www.colr.org/json/color/random');
const data = await response.json();
const [color] = data.colors;
changeColor(color);
};
export default FetchColor;
原版 JavaScript script.js:
const fetchButton = document.getElementById('fetch-api');
fetchButton.addEventListener('click', fetchColorFunc);
async function fetchColorFunc() {
const response = await fetch('https://www.colr.org/json/color/random');
console.log(`Response: ${response}`);
const data = await response.json();
console.log(`Data: ${data}`);
}
【问题讨论】:
-
您检查过开发工具中的网络选项卡吗?请求是否可能被缓存?尝试在请求中添加例如随机字符串或当前时间戳 (
?1234567)。 -
您是否尝试过记录获取请求的结果?然后,您可以确定您从服务器获得了正确的数据。它也可能与反应如何重新渲染、重新定义回调有关。等等试试 useCallback
-
@SebastianRichner 是一样的
-
@ZachSmith 不只是 React,我也试过 vanilla js,我只是在上面添加了代码 sn-p
标签: javascript reactjs api fetch