首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用法: useState或useRef格式提交

用法: useState或useRef格式提交
EN

Stack Overflow用户
提问于 2021-07-03 10:39:49
回答 2查看 3.4K关注 0票数 5

通常,当我处理表单提交时,我使用useState作为输入值,并将onChange事件设置为

代码语言:javascript
复制
const [inputValues, setInputValues] = useState({
    title: "",
    address: "init"
  });

  function submitHandler(e) {
    e.preventDefault();

    const meetupData = {
      meetupTitle: inputValues.title,
    };

    console.log(meetupData);
  }
  return (
    <form onSubmit={submitHandler}>
      <div>
        <label htmlFor="title">Meetup Title</label>
        <input
          type="text"
          required
          id="title"
          value={inputValues.title}
          onChange={(e) =>
            setInputValues({ ...inputValues, title: e.target.value })
          }
        />
      </div>
      <div>
        <button>Add Meetup</button>
      </div>
    </form>
  );

但在一些教程中,我发现它是使用useRef编写的

代码语言:javascript
复制
const titleInputRef = useRef();

  function submitHandler(e) {
    e.preventDefault();
    const enteredTitle = titleInputRef.current.value;

    const meetupData = {
      title: enteredTitle,
    };

    console.log(meetupData);
  }
  return (
    <form onSubmit={submitHandler}>
      <div>
        <label htmlFor="title">Meetup Title</label>
        <input type="text" required id="title" ref={titleInputRef} />
      </div>
      <div>
        <button>Add Meetup</button>
      </div>
    </form>
  );

我试着去了解有什么不同,哪一个在一般表现上会更好呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-03 10:48:33

有利有弊。

  • 如果您将表单值保持在状态(也称为可控性组件),一个好处是您可以在更改时立即访问值,例如,如果您希望禁用某个按钮,以防用户在输入框中键入某些内容。
  • 如果采用ref方法(也称为不受控制组件),一个好处是不必在每次用户类型时重新呈现组件(因为调用状态更新会重新呈现)。

AFAIK反应推荐受控成分,但不受控制的成分也是另一种选择。

票数 1
EN

Stack Overflow用户

发布于 2021-07-03 10:54:49

按照目的,如果您使用useState,那么您将得到一个getter和一个setter(这会触发rerender立即更新该值),而如果使用useRef,则只会得到一个getter

因此,如果使用useRef,则不需要设置value={state},而useState需要设置。

通常,如果您想验证用户输入的值(例如,使用onChange事件),则必须使用useState,如果只想在表单提交时获得值,则可以自由使用useRef。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68235448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档