【问题标题】:Invalid Hook Call-My first React Function无效的 Hook 调用——我的第一个 React 函数
【发布时间】:2021-09-30 22:07:13
【问题描述】:

可能是新手错误或误用,但我们开始吧。

错误:const [color, setColor] = useState([])

错误:无效的挂钩调用。 Hooks 只能在函数组件的主体内部调用。这可能是由于以下原因之一:。

我错过了什么?

组件代码: ...

        this.state = {
            nbrrecs:'',
            pageOfItems: [],
            pageSize: 5,
            fcolor:''
        };

        this.setState({fcolor:GetColor(127,90)});
render(){
return(
                 <h2 className="text-center">{this.fcolor}</h2>
           <td style={{color: GetColor(127,90)}} >{GetColor(127,90)} </td>

...

GetColor.js ...

import { useEffect, useState } from "react";
import SiteReportCardMasterService from '../Services/SiteReportCardMasterService';

    const GetColor = (id,rptvalue) =>
    {
        const [color, setColor] = useState([])
        useEffect(() =>{
        SiteReportCardMasterService.getSiteReportCardMasterById(id).then( (res) =>{
            if (rptvalue === 0) setColor(res.data.sitereportcardmasterColore)
            if (rptvalue < 70) setColor(res.data.sitereportcardmasterColord)
            if (rptvalue >= 70 && rptvalue <80) setColor(res.data.sitereportcardmasterColorc)
            if (rptvalue >= 80 && rptvalue <90) setColor(res.data.sitereportcardmasterColorb)
            if (rptvalue >= 90) setColor(res.data.sitereportcardmasterColora)
            })
        })
        return color
    };
    export default GetColor;

...

【问题讨论】:

  • 现在唯一的错误是名称GetColor 对自定义钩子(使用其他钩子的函数)无效。它应该被称为useGetColor。 (这会导致第二条错误消息)。否则一切看起来都正常。
  • 通过应用良好的代码格式,您还将为自己和您的同事提供很多帮助。

标签: reactjs function react-hooks return-value


【解决方案1】:

GetColor 不返回任何内容。

您确实调用了 return,但它位于内部箭头函数 ((res) =&gt;{...return}) 内,并且该返回仅适用于该函数。

此外,您的变量 color 是在内部函数的范围内定义的,因此无法在外部访问。

如果不知道SiteReportCardMasterService.getSiteReportCardMasterById(id) 的作用,很难准确地说出你需要什么,但它似乎是一个异步函数。如果你想在一个变量中使用它的结果,你必须处理这个并正确等待结果,你可以在你的组件中设置一个属性,并使用一个回调函数传递给GetColor

【讨论】:

  • 是的..你在正确的轨道上。 SiteReportCardMasterService.getSiteReportCardMasterById(id) 是对 AXIOS 到 MySQL Springboot REST API 后端的 I/O 调用。我需要获取 RES 数据,然后执行逻辑,然后将颜色值传回并将其接收到组件中。我知道我想要什么,只是不知道如何在代码中实现它(考虑到您认识到的问题)。我能做些什么来帮助你,帮助我? (寻找值得信赖的顾问来帮助完成一个已完成 95% 的项目)。 @Ben Gooding – HighwayRob
  • 您应该阅读有关如何通过 api 调用(实际上是异步)在组件中设置变量的信息。 stackoverflow.com/questions/52068144/…
  • 您可以在您的设置中通过将组件中定义的回调函数传递给您应该在您的.then 中调用的GetColor 来实现此目的。
  • 修改函数看起来更像函数(上图)。现在我收到无效的挂钩调用错误。我是否还必须将其设为带有等待的异步函数?我知道如果我可以编写一个函数来工作,我将关闭并运行,并且能够清理系统中其他地方的一些重复代码。 @Ben Gooding
猜你喜欢
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-14
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
相关资源
最近更新 更多