受控组件和非受控组件的区别

受控组件

  • 受控组件就是必须要控制它,实时监听
  • 给input添加 value={note} 就变成受控组件
  • 监听 value 的 onChange 事件,note 改变的时候就 setNote,控制了 input 的读写
  • React的严格模式(<React.StrictMode>)会让 console.log(note)打出两遍,不影响
const NoteSection: React.FC = () => {
  const [note, setNote] = useState('');
  console.log(note)
  return (
    <Wrapper>
      <label>
        <span>备注</span>
        <input type="text" placeholder="在这里添加备注"
               value={note}
               onChange={(e)=> setNote(e.target.value)}
        />
      </label>
    </Wrapper>
  );
};

非受控组件

  • 非受控组件:就不需要 value 和 onChange
  • 使用 defaultValue,但 note 改变的状态无法获取
  • 添加鼠标移出事件监听,通过ref属性来获取用户input的内容
  • ref属性就是为了获取Dom节点:ref={refInput}refInput.current.value
  • 不进行实时监听,也就是在结束的时候获取到输入的值
  • 和Vue的 v-model.lazy="value"很相似
const NoteSection: React.FC = () => {
  const [note, setNote] = useState('');
  const refInput = useRef<HTMLInputElement>(null);
  const onBlur = () => {
    if (refInput.current !== null) {
      setNote(refInput.current.value);
    }
  };
  return (
    <Wrapper>
      <label>
        <span>备注</span>
        <input type="text" placeholder="在这里添加备注"
               ref={refInput}
               defaultValue={note}
               onBlur={onBlur}
        />
      </label>
    </Wrapper>
  );
};

React onChange 和 HTML onChange 的区别

  • HTML 中的 change 事件是在鼠标移走之后才会触发的事件
    但是早于 onBlur 的(鼠标移开事件)
  • React 中的 change 事件是在输入一个字的时候就触发
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值