当前位置: 首页 > 知识库问答 >
问题:

将useState函数作为属性传递给另一个组件

魏刚豪
2023-03-14

我试图将一个useState函数传递给另一个prop,但我得到以下错误:未捕获范围错误:超出了最大调用堆栈大小

我在子组件中添加了useState函数作为按钮单击的句柄事件,并且假设该错误意味着它在循环中被调用?任何人都可以帮助我理解这里的问题吗?代码如下:

    function App() {
        const[personListe, setPersonListe] = useState([
          {
            firstName:'Test',
            lastName:'testing',
            getFullName:function()
            {
                return `${this.firstName} ${this.lastName}`
            },
            age:28
            },
        ]);
  
      return (<>
          <Header />
          <h1>Welcome to my react page!</h1>
          <Inputfields personListe={personListe} addPerson={setPersonListe} />
          <PersonList personListe={personListe}/>
        </>
      );
    }

子组件(Inputfields.js):

export default function Inputfields({personListe}, {addPerson})
{
    function addPerson()
    {
        let firstName = document.getElementById("firstNameID");
        let lastName = document.getElementById("lastNameID");
        let age = document.getElementById("ageID");
        if(firstName.value.length < 1 || lastName.value.length < 1 || age.value.length < 1)
        {
            alert("Please fill out all the fields!");
        }
        else
        {
            addPerson(
                {
                    firstName:firstName.value,
                    lastName:lastName.value,
                    age:age.value
                }
            );
            firstName.value = "";
            lastName.value = "";
            age.value = "";

        }
    }
    return(
        <>
            <Input id="firstNameID" placeholder="First name" /> <br />
            <Input id="lastNameID" placeholder="Last name" /> <br />
            <Input id="ageID" placeholder="Age" type="number" /> <br />
            <Button variant="contained" sx={{marginTop:2}} onClick={addPerson}>Add person</Button>
        </>
    );
}

共有2个答案

满俊楠
2023-03-14

你没有正确地破坏道具功能,你需要这样做。

export default function Inputfields({personListe,addPerson}) {...rest of your code}
刘琨
2023-03-14

这里有两个问题。首先,你没有正确地分解道具。有一个 props 对象传递给组件,而不是两个。从该对象中解构两个道具:

export default function Inputfields({personListe, addPerson})

第二,更重要的是…您永远不会使用这里传递的addPerson属性。组件要做的第一件事就是使用同名的新函数隐藏该变量:

function addPerson()
{
  //...
}

然后,该函数递归调用自己,直到堆栈溢出。

不要隐藏变量。给函数起一个自己的名字。例如:

function myAddPerson()
{
  //...
}

然后,在该函数中,您可以调用传递给组件的添加人。在 JSX 标记中调用本地函数:

<Button variant="contained" sx={{marginTop:2}} onClick={myAddPerson}>Add person</Button>

基本上,这根本不是一个反应问题。这是普通的JavaScript。如果你给一个变量赋了一个新值(定义一个同名函数就是这么做的),那么原来的值就丢失了。

 类似资料:
  • 问题内容: 我尝试了以下失败的尝试: 在函数a中,我可以使用arguments关键字来访问参数数组,而在函数b中,这些参数将丢失。有没有办法像我尝试的那样将参数传递给另一个javascript函数? 问题答案: 用于对in函数具有相同的访问权,如下所示:

  • 问题内容: 我是ajax和回调函数的新手,如果我弄错了所有概念,请原谅我。 问题: 我可以将 回调 函数作为参数发送给将执行该回调的另一个函数吗? 问题答案: 对。函数引用与任何其他对象引用一样,您可以将它们传递到您的内心。 这是一个更具体的示例: 您还可以传递以下参数:

  • 我试图学习功能性Kotlin,并编写了以下测试代码: 在REPL中,我可以成功调用“findBorrowerX”: 但是我如何拨打“findBorrowerX2”的电话: 并将迭代的借用器x传递给getName?? 这看起来有关联,但我不确定: Kotlin:如何将一个函数作为参数传递给另一个? 提前感谢您对此的帮助! 编辑: 下面是我想做的等效Scala代码: 也许这在科特林是不可能的?

  • 问题内容: 是否可以通过某种方式将一个函数的范围传递给另一个函数? 例如, 我宁愿直接访问变量,即,不使用类似或的任何东西,而只是直接使用或。 问题答案: 真正访问函数私有范围的唯一方法是在函数内部声明,这样就形成了一个闭包,允许隐式访问变量。 这是您的一些选择。 直接访问 在内部声明。 如果您不想在中使用,则可以将它们都放在更大的容器范围内: 这些是您可以直接使用的变量而无需任何额外的代码来移动

  • 问题内容: 我想将传递给function()的所有参数作为参数传递给内部的另一个function(), 这可以在被调用过程中完成并将它们传递给,但是还有另一种方法吗? 本来 但是如果我的func1签名是 我如何将它们全部发送到func2,而不使用 有没有一种方法像在javascript中? 问题答案: 显式比隐式更好, 但是如果您真的不想键入一些字符,请执行以下操作: 都是局部变量,因此您不能在调

  • 问题内容: 我不理解以下示例,可以说我具有以下功能: 为什么#1是正确的解决方案,而#2是错误的解决方案?基本上是一个字典,所以如果我想将参数传递给openX,我认为正确的方法是没有并给出字典。但是python显然不喜欢第二个,并告诉我我给了3个而不是2个参数。那么,这背后的原因是什么? 问题答案: 在第二个示例中,您提供3个参数:文件名,模式和字典()。但是Python期望:2个形式参数和关键字