React input 输入卡顿问题

下面代码会有输入卡顿问题,是因为changeLockWindows会调后端,setPosY不会立即刷新页面值,必须鼠标点击一下,触发onblur事件,input才会刷新

TypeScript 复制代码
const [posY, setPosY] = useState(100);
const changePosY = useCallback((val: number) => {
  setPosY(val);
  changeLockWindows({y: val});
}, [])
  

<input
  className="pill__input"
  type="number"
  value={posY}
  onChange={(event) =>
    changePosY(Number(event.target.value))
  }
/>

解决办法

TypeScript 复制代码
const [posY, setPosY] = useState(100);
// 单纯更新state,不包含延时逻辑
const changePosY = useCallback((val: number) => {
    setPosY(val);
}, [])

// 监听posY变化,延迟执行窗口逻辑
useEffect(() => {
    changeLockWindows({y: posY});
}, [posY])

<input
  className="pill__input"
  type="number"
  value={posY}
  onChange={(event) =>
    changePosY(Number(event.target.value))
  }
/>

原因:是因为我的changeLockWindows回调函数里不知道哪里更改了PosY的值的原因,同步更新值就好了。上面方法做为参考。

相关推荐
东风破_5 小时前
Docker 基础:为什么需要容器?
前端·后端·nginx
东风破_5 小时前
Docker 实战:使用 Nginx 作为容器入口代理 Node 服务
前端·后端·nginx
你别说话了6 小时前
Vue项目解决跨域
前端·javascript·vue.js
指尖时光.6 小时前
Three.js 超全入门综合案例
开发语言·javascript·ecmascript
唐青枫6 小时前
http-server:别再双击 index.html,一条命令把目录变成网站
前端·javascript
网安蟹佬霸7 小时前
OSINT开源情报收集实战:从信息搜集到资产测绘(2026最新万字保姆级指南)
前端·网络·安全·web安全·网络安全·开源
a1117767 小时前
3D历史建筑展览馆 THreeJS 开源
前端·开源
单线程_017 小时前
【源码阅读】Vue3 Tokenizer 词法分析器完整状态机流转深度梳理(3.4+ 新版架构)
前端
PBitW7 小时前
PM 丢来 3 个 Excel、12 个功能、4 种情形?用 TRAE Work 30 分钟整理成前端开发文档
前端·trae
学习星球9 小时前
Solid.js 实战:拆解官方 RealWorld 项目
开发语言·javascript·vue.js