React useRef не работает с текстовым полем пользовательского интерфейса Material

#reactjs #user-interface #input #textfield

#reactjs #пользовательский интерфейс #ввод #текстовое поле

Вопрос:

почему useRef не работает с текстовым полем пользовательского интерфейса Material, но отлично работает с традиционным элементом ввода html?

Пользовательский интерфейс:

У меня есть элемент ввода текстового поля, а над ним у меня есть список кнопок (буквы латинского алфавита, специальные символы). Я могу сфокусировать панель ввода при первом рендеринге компонента, но если я нажму на одну из кнопок над входом, фокус не вернется на панель ввода.

Что я пробовал до сих пор

 const Search = (props) => {
  const [searchTerm, setSearchTerm] = useState("");
 

  const inputRef = useRef(null);

  const handleLatinButton = (letter) => {
   inputRef.current.focus();
    setSearchTerm(searchTerm   letter);
  };


  const handleSubmit = (e) => {
    e.preventDefault();
    History.push("/?q="   searchTerm);
    props.onFormSubmit(searchTerm, optionValue);
    setSearchTerm("");
  };

  useEffect(() => {
    const params = new URLSearchParams(location.search);
    const q = params.get("q");
    setSearchTerm(q);
    inputRef.current.focus();
    
  }, []); // Am I missing something here in the array?
  

JSX

     <Button letter="č" handleLatinButton={handleLatinButton} />
    <Button letter="ḍ" handleLatinButton={handleLatinButton} />
     ... 
    <form onSubmit={handleSubmit}>
      <TextField
        fullWidth
        label="Search..."
        value={searchTerm}
        onChange={handleChange}
        ref={inputRef}
        autoFocus="true"
        InputProps={{
          endAdornment: (
            <InputAdornment position="start">
              <IconButton type="submit">
                <SearchIcon />
              </IconButton>
            </InputAdornment>
          ),
        }}
      />
    </form>
  

Если я заменяю текстовое поле на ввод, фокус срабатывает после нажатия на одну из латинских кнопок.

Ответ №1:

Это просто способ, которым MUI обрабатывает ссылку…

 <TextField
    fullWidth
    label="Search..."
    value={searchTerm}
    onChange={handleChange}
  change this >>>  ref={inputRef}
  for this >>> inputRef={inputRef}
    autoFocus="true"
    InputProps={{
      endAdornment: (
        <InputAdornment position="start">
          <IconButton type="submit">
            <SearchIcon />
          </IconButton>
        </InputAdornment>
      ),
    }}
  />
  

возможно, чтобы избежать путаницы, измените имя ссылки