从另一个组件反应钩子设置状态

Posted

技术标签:

【中文标题】从另一个组件反应钩子设置状态【英文标题】:Setting state from another component react hooks 【发布时间】:2020-04-01 18:41:03 【问题描述】:

有两个组件,一个是<Form />,另一个是<LoginForm /><LoginForm /> 看起来像

const LoginForm = () => 
   return (
      <Form
         inputs=[
             //some objects here               
         ]
         onSubmit=(data, setError) => 
             setError('some error')
         
      />
   );
;

&lt;Form /&gt; 组件看起来像。

const Form = (onSumbit, inputs) => 
   const [error, setError] = useState(''); 
   return (
      <>
         error ? <div>error</div> : null
         //rendering inputs here
         <button onClick=() => onSubmit('some data which is not relative to problem', setError)>
      </>
    )

现在,当单击按钮时,onSubmit() 应该会运行。它应该调用setError,它应该显示一些错误但它没有显示任何错误。它也没有显示任何错误。

注意:这只是代码的相关部分。代码实际上很大。但我敢肯定,只有这部分有一些基本的缺陷。

【问题讨论】:

已解决:是一个错字 onSumbitonSubmit 【参考方案1】:

您之前有拼写错误和语法错误,因此无论如何这对您都不起作用。

这似乎符合你的意思。

const Form = ( onSubmit, inputs ) => 
  const [error, setError] = useState('');

  return (
    <>
      error ? <div>error</div> : null
      // rendering inputs here
      
      <button onClick=() => onSubmit('data', setError) />
    </>
  );
;

【讨论】:

我想从父组件setError()&lt;LoginForm /&gt; 在您还编辑了原始帖子后进行了编辑以适合您的用例。另外,您为什么要对所有答案投反对票? 首先感谢您抽出时间提问。其次,问题是我刚刚解决的问题。第三,你怎么能说我不赞成答案?【参考方案2】:

这是我的代码。它工作正常。可能你的代码有错别字。

const Form = (onSubmit, inputs) => 
  const [error, setError] = useState(''); 
  return (
    <>
        error ? <div>error</div> : null
        <button onClick=() => onSubmit('some data which is not relative to problem', setError)>
          Hi
        </button>
    </>
  )


const LoginForm = () => 
  return (
     <Form
        inputs=[
            //some objects here               
        ]
        onSubmit=(data, setError) => 
            setError('some error')
        
     />
  );
;

【讨论】:

我已经解决了这个问题。这是关于数据的异步性质。你是对的,给定的代码应该可以正常工作。 是的,我的错误很抱歉。但我会说你的回答没有任何意义。没有什么可以解决问题,甚至没有什么可以表明代码运行良好。一个【参考方案3】:

有时您声明onSumbit,有时声明onSubmit,您需要保持一致:

const LoginForm = () => 
  return (
    <Form
      onSubmit=(data, setter) => 
        setter('some error');
      
    />
  );
;

const Form = ( onSubmit, inputs ) => 
  const [error, setError] = useState('');
  return (
    <>
      error ? <div>error</div> : null
      <button
        onClick=() => 
          onSubmit('some data which is not relative to problem', setError);
        
      >
        Submit
      </button>
    </>
  );
;

【讨论】:

以上是关于从另一个组件反应钩子设置状态的主要内容,如果未能解决你的问题,请参考以下文章

在 useState 钩子中反应设置状态

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

反应钩子:新状态值未反映在 setInterval 回调中

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

将状态从钩子函数导出到另一个组件

如何在反应中使用带有useState钩子的回调[重复]