我有一个material 的日期 Select 器,如果你点击它所属的文本字段,它就会打开.如果在日期选取器打开时try Select 另一个文本字段,它将指向/焦点回到日期选取器.

Note:这个问题也是无的放矢的,它会在关闭DatePicker后再次重新聚焦.

示例演示:https://stackblitz.com/edit/react-b4xpki?file=demo.tsx

代码:

export default function BasicDatePicker() {
  const [value, setValue] = React.useState<Dayjs | null>(null);
  const [open, setOpen] = React.useState(false);

  return (
    <LocalizationProvider dateAdapter={AdapterDayjs}>
      <TextField placeholder='Click here while datepicker is opened' fullWidth={true} sx={{mb:2, mr: 2}}/>
      <DatePicker
        label="Basic example"
        value={value}
        onChange={(newValue) => {
          setValue(newValue);
        }}
        open={open}
        onOpen={() => setOpen(true)}
        onClose={() => setOpen(false)}
        renderInput={(props) => (
          <TextField {...props} onClick={(e) => setOpen(true)} />
        )}
      />
    </LocalizationProvider>
  );
}

那么如何重现问题呢?

  1. 单击操作日期 Select 器(而不是图标)
  2. 单击另一个文本字段
  3. 观察目标/焦点如何回到日期 Select 器上

推荐答案

您可以创建名为state的焦点,以便在<TextField />处控制onFocus

首先,创建焦点命名状态:

const [focus, setFocus] = useState(false);

TextField:如果onFocusopen为False,则currentTarget不应为焦点.

 <TextField
     {...props}
      onFocus={(e) => {
          setFocus(open);
          if (!open) {
             e.currentTarget.blur();
             return;
          }
      }}
      focused={focus}
      onClick={(e) => setOpen((prev) => !prev)}
 />

如果DatePicker中的值更改,则focus应为TRUE.

<DatePicker
    label="Basic example"
    value={value}
    onChange={(newValue) => {
      setValue(newValue);
       setFocus(true);
    }}
    ...otherProps
/>

链接:https://stackblitz.com/edit/react-b4xpki-rirdxn?file=demo.tsx

Javascript相关问答推荐

从实时数据库(Firebase)上的子类别读取数据

模块与独立组件

Angular:动画不启动

CheckBox作为Vue3中的一个组件

VUE 3捕获错误并呈现另一个组件

在HTML语言中调用外部JavaScript文件中的函数

如何创建返回不带`new`关键字的实例的类

钛中的onClick事件需要在两次点击之间等待几秒钟

使用插件构建包含chart.js提供程序的Angular 库?

传递方法VS泛型对象VS事件特定对象

当从其他文件创建类实例时,为什么工作线程不工作?

FileReader()不能处理Firefox和GiB文件

react -原生向量-图标笔划宽度

输入的值的类型脚本array.排序()

MongoDB通过数字或字符串过滤列表

如何在Jest中模拟函数

未捕获的不变违规:即使在使用DndProvider之后也应使用拖放上下文

我在哪里添加过滤器值到这个函数?

如何使用fltter_js将对象作为参数传递给javascrip?

无法在Adyen自定义卡安全字段创建中使用自定义占位符