javascript - 我的反应按钮不起作用 - 我使用 useState 和 useEffect
问题描述
我不确定为什么我的 Button 不起作用,我使用 useState 和 useEffect
这是我的代码:
import React, { useState, useEffect } from "react";
// import Timeout from "await-timeout";
import axios from "axios";
export default function Dogs() {
const [dog, set_Dog] = useState(" ");
console.log({ dog });
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();
}, []);
function output() {
set_Dog(dog);
// console.log(set_Dog({ dog }));
}
return (
<div>
<h2>If you like Dogs,{dog} Press Button</h2>
<button onClick={output}>Click me</button>
{dog}
<img src={dog} />
</div>
);
}`
当我点击按钮图像消失时,我想在不刷新浏览器的情况下显示狗的新图像
解决方案
由于过时的闭包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中的工作演示
阅读有关过时关闭的更多信息
推荐阅读
- sql-server - 如何将表值参数从excel vba传递到存储过程
- php - 如何在PHP中的1位和2位数字后获得正数和负数
- django-models - Django---->模型中的app_label
- python - python (2.7):使用类装饰器访问类属性
- react-native - 如何使用 on-press 打开 JavaScript 文件(反应原生应用程序)
- python - 烧瓶变量未显示在我的 html 中
- java - 如何在spring-hibernate中动态绕过字段上的验证
- java - Java Process 没有输出到标准输出
- python - 如何在 Python 中修改 def 的行为?
- php - Detect PHP code in files with mixed content (PHP/HTML) by PHP for Obfuscate?