【问题标题】:Setting React Element Focus Dynamically without Arrow Function在没有箭头功能的情况下动态设置 React 元素焦点
【发布时间】:2019-11-04 12:17:53
【问题描述】:

我目前有以下运行良好的代码:

import React, {
  RefObject,
  useReducer,
  useRef,
  useState
} from 'react';
import TextField from '@material-ui/core/TextField';

const MyComponent: React.FC = () => {
    const input1Ref = useRef<HTMLInputElement>(null);
    const input2Ref = useRef<HTMLInputElement>(null);
    const [focusedElRef, setFocusedElRef] = useState<RefObject<HTMLInputElement>>(startDateRef);

  return (
    <div>
      <TextField
        inputRef={input1Ref}
        autoFocus={true}
        onFocus={() => setFocusedElRef(input1Ref)}
      />
      <TextField
        inputRef={input2Ref}
        onFocus={() => setFocusedElRef(input2Ref)}
      />
    </div>
  )
}

有没有一种方法可以使用从onFocus 方法自动返回的值,该值指示我可以在另一个箭头函数中使用的输入引用来正确调用setFocusedElRef

更新:11 月。 2019 年 5 月 5 日

如果输入是焦点,我还需要稍后检查代码,例如使用 if (focusedElRef === input1Ref)

我知道这个优化很不值,但我还是很好奇。

谢谢!

【问题讨论】:

    标签: reactjs material-ui arrow-functions currying


    【解决方案1】:

    你可以只使用一个 onFocus 函数并且只保持一个当前焦点元素的状态:

    创建示例:

    https://codesandbox.io/s/material-demo-73hmm

    【讨论】:

    • 谢谢,但是我将如何检查当前输入是否在焦点上?抱歉,我不清楚这一点,我更新了我的问题。
    • 你有当前或最后一个焦点的focusedEl,你想检查现在是否在焦点上:codesandbox.io/s/material-demo-zhl7vfocusedEl === document.activeElement
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 2019-07-30
    • 2011-08-21
    • 1970-01-01
    • 2022-12-10
    • 2019-06-25
    • 1970-01-01
    相关资源
    最近更新 更多