输入框无法清空,有没有 react 一点的写法?

这个代码可以用,但是感觉不太 react

return (
    <form onSubmit={(e) => {
      e.preventDefault()
      const form = e.target
      const title = form.title.value.trim()
      if(!title) return;
      todoStore.addTodo(title)
      form.title.value = ''
    }}><input placeholder="输入任务" name="title"/></form>
  )

下面的代码,清空不了 input

const NewTask = observer(({ todoStore }) => {
  const [title, setTitle] = useState("");
  return (
    <form onSubmit={(e) => {
      e.preventDefault()
      if(!title.trim()) return;
      console.log(e.target)
      todoStore.addTodo(title)
      setTitle("")
    }}><input placeholder="输入任务" onChange={(e) => setTitle(e.target.value.trim())}/></form>
  )
})
阅读 2.5k
1 个回答

其实你写得差不多了,加一个逻辑即可:value={title},这样构造成受控组件

const NewTask = observer(({ todoStore }) => {
  const [title, setTitle] = useState("");
  return (
    <form onSubmit={(e) => {
      e.preventDefault()
      if(!title.trim()) return;
      console.log(e.target)
      todoStore.addTodo(title)
      setTitle("")
    }}><input placeholder="输入任务" value={title} onChange={(e) => setTitle(e.target.value.trim())}/></form>
  )
})

参考官方文档:https://reactjs.org/docs/form...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题