关于 React 中使用 input,输入之后失焦问题解决方案

1.出现问题代码(demo)

import React, { useState } from "react";

const All = ()=>{

    const [aValue, setAValue] = useState('')

    const A = ()=>{
        return (
            <div>
                <input
                    value={aValue}
                    onInput={(e)=>{
                       e.persist()
                       setAValue(e.target.value)
                    }}
                />
            </div>
        )
    }

    return (
        <div>
            <A />
        </div>
    )
}

export default All;

2.解决方案

import React, { useState } from "react";

const All = ()=>{

    const [aValue, setAValue] = useState('')

    const a = ()=>{
        return (
            <div>
                <input
                    value={aValue}
                    onInput={(e)=>{
                       e.persist()
                       setAValue(e.target.value)
                    }}
                />
            </div>
        )
    }

    return (
        <div>
            {
               a()
            }
        </div>
    )
}

export default All;

3.解决说明

因为我以前是用 VUE 开发的,React 还不是很熟,看一些大佬说,出现这个问题是 嵌套高级组件,嵌套内组件刷新 React 触发 render 会重新计算组件相关的 key,导致前后两者不一致,我的修改从标签引用变成函数式引用,可能是让 React 计算高级组件的嵌套变成了,高级组件内部逻辑的判断,不过这些都还只是我的猜测,后续有时间会去看一下源码,给出答案

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值