MUI 仅处理 onBlur 和 onKeyPress 之一

问题描述 投票:0回答:1

我目前正在处理一个 TypeScript 和 Material-UI 项目。我的目标是管理 TextField 组件的 onBlur 事件和 onEnter 按键事件。

场景如下:我已将此文本字段集成到菜单中。当用户在字段中键入内容然后在菜单外部单击时,我想使用 onBlur 事件存储输入的值。但是,我还需要捕获按下 Enter 键时的值。出现这个问题是因为按 Enter 键会触发 onKeyDown 事件和 onBlur,导致该函数在我保存值的地方被调用两次。

我已经搜索过在线和其他 stackoverflow 帖子,但没有找到解决此问题的解决方案(可能是因为 TS 并且无法与其他事件一起调用)。

任何帮助或指导将不胜感激。

javascript reactjs typescript dom material-ui
1个回答
0
投票
import React, { useState } from 'react';
import TextField from '@mui/material/TextField';

const MyComponent = () => {
const [value, setValue] = useState('');
const [enterPressed, setEnterPressed] = useState(false);

const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {
if (event.key === 'Enter') {
  setEnterPressed(true);
  // Handle saving the value when Enter is pressed
  saveValue();
 }
 };

const handleBlur = () => {
// Check if Enter was pressed, if so, do not save the value again
if (!enterPressed) {
  // Handle saving the value on blur
  saveValue();
}
// Reset the enterPressed state
setEnterPressed(false);
};

const saveValue = () => {
// Save the entered value (you can replace this with your logic)
console.log('Value to save:', value);
// Clear the input or perform any necessary actions
setValue('');
};

return (
<TextField
  value={value}
  onChange={(e) => setValue(e.target.value)}
  onKeyDown={handleKeyDown}
  onBlur={handleBlur}
  label="Enter value"
  variant="outlined"
 />
 );
 };

 export default MyComponent;

要使用 TypeScript 和 Material-UI 处理 TextField 组件中的 onBlur 事件和 Enter 按键事件,您可以结合使用状态管理和事件处理来实现您的目标。

一种方法是使用状态变量来跟踪 Enter 键是否被按下。在处理 onKeyDown 事件时,您可以相应地设置此状态,并使用它来防止按下 Enter 时触发 onBlur 事件。

© www.soinside.com 2019 - 2024. All rights reserved.