微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用React钩子创建带有参数的受控输入并传递事件对象?

如何解决如何使用React钩子创建带有参数的受控输入并传递事件对象?

我正在尝试制作表单并创建受控输入,我在window.event之前就使用过,但是此方法已被弃用,尽管我使用它,但我不想再使用它,尽管该解决方案可以按我的方式工作,但是我担心兼容性,但是如果我不使用它,我尝试使用了syndicateEvent,但它不起作用,我尝试了两种使用.bind()添加事件的方法,该方法不起作用会导致出现以下错误: t在初始化之前访问输入,setInputs,第二次使用SyntheticEvent(e)=> {changeHandler} 当我写第二个字母时,它崩溃并出现错误,无法读取null的属性ID,这是怎么回事,这可能与钩子有关吗,或者我应该与类一起使用?

 const changeHandler = (inputs,setInputs,clone,event) => {
      const cloned = clone(inputs[event.target.id]);
      cloned.config.value=event.target.value;
      setInputs(prevstate=>{
          return {
              ...prevstate,[event.target.id]:cloned
          }
      })
  };

使用useState的输入配置我作为道具传递给我的自定义输入组件

  const [inputs,setInputs] = useState({
    username: {
      config: {
        type: "text",placeholder: "John Doe",id: "username",value: "",onChange: changeHandler.bind(this,inputs,cloneDeep)
      },label: {
        label: "Username *",htmlFor: "username",},email: {
      config: {
        type: "email",placeholder: "johndoe@example.com",id: "email2",onChange: (e) => {
          changeHandler(inputs,cloneDeep,e);
        },label: {
        label: "E-mail *",htmlFor: "email2",});

编辑:出于性能原因,此合成事件被重用。如果看到此消息,说明您正在访问已发布/无效的合成事件中的属性target。设置为空。如果必须保留原始的合成事件,请使用event.persist()

使用event.persist()解决了问题,但我想知道可以使用吗?

解决方法

我能够使用event.persist()来修复它,从而防止了原始事件的无效化,这就是为什么第二次触发该事件时,我收到有关尝试访问null属性的错误

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。