选中复选框后,文本不会显示在反应挂钩中

Once the checkbox is checked, the text is not displaying in react hooks

选中 checkbox 后,我想显示 input 文本字段。默认情况下,不应选中该复选框,并且应隐藏 token 输入字段。

现在我遇到错误并且无法正常工作。

警告:道具类型失败:您在没有 onChange 处理程序的情况下向表单字段提供了 checked 道具。这将呈现一个只读字段。如果该字段应该是可变的,请使用 defaultChecked。否则,设置 onChangereadOnly

 const [checked, setChecked] = useState(false);
 const [showToken, setShowToken] = useState({ show: false });

 const handleClick = (e) => {
    e.preventDefault();
    setChecked(checked);
    if(checked === true){
      setShowToken({ show: true })
    }
  }

     <label>
          <input type="checkbox" onClick={handleClick} checked={checked}/>
           {
             showToken.show && (
             <input className="inputRequest formContentElement" name="token" type="text" placeholder="token"/>
               )
           }
     </label>

我们可以优化代码,

  1. 删除 const [showToken, setShowToken] = useState({ show: false });
  2. 使用 checked 属性显示文本框。
  3. 使用 setChecked 钩子设置复选框已选中 changes.So 我们不再需要 handleClick 方法。

您可以按如下方式简单地执行此操作,

// Get a hook function
const {useState} = React;

const Example = () => {
  const [checked, setChecked] = useState(false);
  
  return (
    <div>
      <label>
          <input type="checkbox" onChange={() => setChecked(!checked)} checked={checked}/>
           {
             checked ? (
             <input className="inputRequest formContentElement" name="token" type="text" placeholder="token"/>
               ) : (<div></div>)
           }
     </label>
    </div>
  );
};

// Render it
ReactDOM.render(
  <Example />,
  document.getElementById("react")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="react"></div>