【问题标题】:React: get input values without using 'onChange'反应:在不使用'onChange'的情况下获取输入值
【发布时间】:2021-05-04 11:50:59
【问题描述】:

如何在不使用onChange 的情况下获取输入值?原因是我在加载时使用useEffect 为表单设置动画,使用onChange 会在每个键入的字母上重置动画,这是不希望的。我只想在单击提交按钮时获取输入值(或submitHandler,无论工作如何)。

这是我现在正在使用的:

const [email, setEmail] = useState('')

<input 
type="email" 
className="loginPage-form-item-input" 
name='email' 
value={email} 
onChange={(e) => setEmail(e.target.value)} 
required
/>

const submitHandler = (e) => {
    e.preventDefault()
    dispatch(login(email, password))
  }

我曾尝试使用ref 和useRef,但我不太了解它们,并且出现Function components cannot have string refs 之类的错误。

编辑(使用效果代码):

const formRef = useRef(null)
  useEffect(() => {
    gsap.from(formRef.current, {duration: 1, y:100, opacity: 0, ease: 'power2.out'})
  })

在表单 div 上使用 ref={formRef}

【问题讨论】:

  • 编辑后的帖子显示。

标签: reactjs input onchange


【解决方案1】:

您正在useEffect 上触发动画,并且该动画的任何状态更新结果都将再次执行。这意味着您没有在 useEffect 正确指定您的依赖项。

当您不指定依赖项时,它将在每次重新渲染时执行。 useEffect 采用第二个参数来声明这些依赖项。因为你只想在挂载时执行,你应该传递一个空数组:

useEffect(() => {
  // animation code
  }, []) // empty array will execute your animation only on mount

useEffect documentation

【讨论】:

  • 它有效,谢谢!我正在为动画使用 gsap,并且我删除了依赖项,因为我不断从控制台收到一条消息,说这是一个“不必要的依赖项”。
【解决方案2】:

你可以使用这样的东西。但不推荐做事的方式。

function handleSubmit(e) {
    e.preventDefault()
    const {username, password } = e.target.elements
    console.log({username: username.value, password: password.value })
}

<form onSubmit={handleSubmit}>
   <input type="text" id="username"/>
   <input type="text" id="password"/>
   <input type="submit" value="Login" />
</form>

【讨论】:

  • 它有点工作,但它会引发 JSON 循环错误......
猜你喜欢
  • 2021-06-12
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-05
  • 2015-12-14
相关资源
最近更新 更多