3 回答
TA贡献1880条经验 获得超4个赞
由于过时的闭包dog,函数中设置的值永远output不会改变。
因为您想要填充状态mount并在用户单击按钮时对其进行更改,所以您必须在函数范围内创建调用 API 的函数并用 记忆它useCallback,相同的函数可以传递给onClick. 例如,
export default function Dogs() {
const [dog, set_Dog] = useState("");
console.log({ dog });
const getDogPic = useCallback(async () => {
const res = await axios.get("https://dog.ceo/api/breeds/image/random");
const {
data: { message }
} = res;
console.log("Got back", message);
set_Dog(message);
}, []);
useEffect(() => {
getDogPic();
}, []);
return (
<div>
<h2>If you like Dogs,{dog} Press Button</h2>
<button onClick={getDogPic}>Click me</button>
{dog}
<img src={dog} alt={"dog-pic"} />
</div>
);
}
Codesandbox中的工作演示
阅读有关过时关闭的更多信息
TA贡献1811条经验 获得超5个赞
获取第一张图像后,您可以使用useRef保留对您的函数的引用。
const click_ref = React.useRef(null);
useEffect(() => {
async function getFetch() {
const res = await axios.get("https://dog.ceo/api/breeds/image/random");
const {
data: { message },
} = res;
console.log("Got back", message);
set_Dog(message);
}
getFetch();
click_ref.current = getFetch;
}, []);
<button onClick={() => click_ref.current()}>Click me</button>
添加回答
举报