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的值的原因,同步更新值就好了。上面方法做为参考。

相关推荐
এ慕ོ冬℘゜1 小时前
JavaScript 数据类型检测与转换、运算符超全实战详解
前端·html
kyriewen1 小时前
我用 AI 写代码快了 3 倍——然后同事的 Code Review 全变成了我的
前端·程序员·ai编程
李明卫杭州2 小时前
Vue2 portal-target 组件与 Vue3 的针对性优化
前端·javascript·vue.js
Tyler_13 小时前
iOS PlayWright mcp server
前端·ios·ai编程
嘟嘟07173 小时前
从零理解 MCP:手写一个本地 MCP Server 并接入 LangChain Agent
前端·后端
cocoafei3 小时前
GPT-5.6 后,别再混淆 ChatGPT 和 Codex 额度了
前端·人工智能·chatgpt
你怎么知道我是队长3 小时前
JavaScript的函数介绍
开发语言·前端·javascript
weedsfly3 小时前
观察者模式 vs 发布-订阅模式:从概念到实战,一次讲清楚
前端·javascript·面试
暗不需求3 小时前
手写 AJAX:从 XMLHttpRequest 到封装一个简易 axios
前端·面试