reactjs - Hook 状态的更改未更新模板文字中的值

标签 reactjs react-hooks

我是 Hooks 新手,是在学习 React 类(class)后才来的,所以有点迷失。在下面的代码中,我将 setDog 更改为 Husky,然后它应该告诉 API 调用来搜索并获取哈士奇的照片。但尽管狗发生了变化,但它并没有发生。谁能看出我哪里出了问题吗?

import React, { useState, useEffect } from 'react';
import axios from 'axios';

export default function ApiCalls() {
    const [ data, setData ] = useState();
    const [ dog, setDog ] = useState('labrador');

    useEffect(() => {
        const fetchData = async () => {
            const result = await axios(`https://dog.ceo/api/breed/${dog}/images`);
            setData(result.data.message[0]);
        };
        fetchData();
    }, []);

    const Husky = () => {
        setDog('husky');
    };

    return (
        <div>
            <img alt={''} src={data} />
            <button onClick={Husky}>Retrieve Husky</button>
        </div>
    );
}

最佳答案

你的useEffect敏感度列表是[],所以这个useEffect只在狗变量是labrador的组件挂载上运行。因此,在您更改按钮上的狗之后,单击不会从服务器获取任何新内容。更改您的代码如下:

useEffect(() => {
        const fetchData = async () => {
            const result = await axios(`https://dog.ceo/api/breed/${dog}/images`);
            setData(result.data.message[0]);
        };
        fetchData();
  }, [dog]);

关于reactjs - Hook 状态的更改未更新模板文字中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61252837/

相关文章:

node.js - 启动前从文件夹中读取文件

javascript - 获取事件标签项的元素以显示边界线

javascript - 状态未在 StrictMode 中更新

reactjs - 如何将 Firebase onAuthStateChange 与新的 React Hooks 结合使用?

javascript - 目标容器不是使用 webpack 4 和 React 的 DOM 元素

reactjs - 从实用程序类型中解构 Prop (提取和排除 - TypeScript 和 React)

reactjs - 如何与 ReactTestRenderer/Jest 渲染的组件交互

javascript - Firebase 在 React Native 数据获取中返回 "undefined"值

javascript - 如何在 'useEffect' 钩子(Hook)中获取最新的组件变量值?

reactjs - React 中的自定义钩子(Hook)和私有(private)路由立即导航到登录