有没有办法将状态信息从反应钩子传递到反应中的嵌套函数?

Posted

技术标签:

【中文标题】有没有办法将状态信息从反应钩子传递到反应中的嵌套函数?【英文标题】:Is there a way of passing state information from react hooks into nested functions in react? 【发布时间】:2020-10-05 11:10:07 【问题描述】:

这是我的第一个单独的 react 项目,如果我错过了任何明显的地方,敬请原谅。我正在尝试找到一种将 account 和 value 放入 handlePledge 的方法。显然你不能直接在嵌套函数中使用它们。我尝试了不同的方法,例如将 account 和 value 作为参数传递(即 handlePledge(account, value)),但没有运气。

function App() 
  const [account, setAccount] = useState();
  const [button, setButton] = useState('Enable Ethereum');
  const [value, setValue] = useState(1);


  const handlePledge = async (e) => 
    e.preventDefault();
    const gas = await SixtySixDays.methods.createNewPledge().estimateGas();
    const result = await SixtySixDays.methods.createNewPledge().send(
      from: #account-goes-here,
      gas,
      value: #value-goes-here
    )
    console.log(result);
  

谢谢,非常感谢您的帮助。

【问题讨论】:

“显然你不能在嵌套函数中直接使用它们”...为什么不呢? 我基于文档中的钩子规则。我在尝试后意识到了这一点,但它不起作用 我认为仅将它们用作handlePledge 函数中的变量没有任何问题。什么问题? 你必须在组件的顶层调用钩子本身(即useState),但你可以在函数的任何地方使用状态变量(或设置函数),只需正常关闭 谢谢你们的帮助,我误解了文档的意思 【参考方案1】:

您可以像这样直接传递值:

 const result = await SixtySixDays.methods.createNewPledge().send(
   from: account,
   gas,
   value: value

“显然你不能在嵌套函数中直接使用它们。” - 你可以而且你应该

【讨论】:

谢谢佩德罗,我误读并误解了文档【参考方案2】:

您可以并且应该直接使用任何状态变量。

    const result = await SixtySixDays.methods.createNewPledge().send(
      from: account,
      gas,
      value: value
    )

以上应该可以。

【讨论】:

谢谢好奇的家伙,我误读并误解了文档 哈哈,这发生在我们最好的人身上!【参考方案3】:

正如@Nick 所暗示的,您实际上可以在封闭范围内使用这些变量。它们可以从您在其共享范围内声明的函数完全访问。

也许您的问题是如何更新渲染?如果我没有回答您的问题,请说明您遇到的确切错误。

【讨论】:

我已更新到建议但仍然无法正常工作。我得到的错误是在提交表单时没有将值传递给发送。那就是读取的值是0,我不明白为什么。

以上是关于有没有办法将状态信息从反应钩子传递到反应中的嵌套函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何将输入值从子表单组件传递到其父组件的状态以使用反应钩子提交?

反应钩子:useState/context;无法读取未定义的属性“头像”/如何更新嵌套对象

反应钩子第一次没有设置状态

OnSubmit 函数不会更新 React 中的反应钩子状态变量

反应钩子如何确定它们的组件?

反应:你怎么能设置一个嵌套的孩子的状态