0

我正在使用 useState Hook 存储表单以在用户单击时管理视图。界面显示良好,但我无法在输入字段中输入值。谁能告诉我为什么?谢谢。

const [url, seturl] = useState({url: ''});
const changeUrl = (field) => (event) => {
    seturl({
    ...url,
    [field]: event.target.value,
   });
 };
const [step, setStep] = useState(
   <form>
     <input type="text" value={url.url} onChange={changeUrl('url')}/>
    </form>
);
return (
  <div>{step}</div>
);
4

3 回答 3

1

如果您将某些内容传递给函数,onChange则需要像这样调用它:

onChange={e => seturl({ url: e.target.value })}

或者您可以通过以下方式简单地实现此目的:

const [url, setUrl] = useState('');

return (
  <div>
    <form>
     <input type="text" value={url} onChange={e => setUrl(e.target.value)}/>
    </form>
  </div>
);

从上面的例子中得到的好处是使用钩子来方便自己并摆脱对对象的管理。如果您有更多字段,例如urland page,您可以创建多个状态,例如:

const [url, setUrl] = useState('');
const [page, setPage] = useState('');

希望这会帮助你。

于 2020-02-10T11:58:51.547 回答
1

您需要调用changeURL函数 onChange,而不是每次。

使用您的代码,每次渲染都会触发 changeUrl('url') 。为避免这种情况,您需要使用输入字段的事件将其作为函数调用:onChange={e => changeUrl(e)}

于 2020-02-10T11:59:57.853 回答
1
 const [url, seturl] = useState("url");

  const changeUrl = event => {
    seturl( event.target.value);
  };

  return (
    <div>
      <form>
        <input type="text" value={url} onChange={(e)=>changeUrl(e)} />
        <p>URL: {url}</p>
      </form>
    </div>
  );
于 2020-02-10T12:05:02.343 回答