React-final-form - ввод теряет фокус после каждого нажатия клавиши

import React from "react";
import { Field, Form } from "react-final-form";

export function LogInDialog(props: { open: boolean; onClose: () => void }) {
  const onSubmit = vals => {
    alert(JSON.stringify(vals));
  };
    console.log("logindialog");
  return (
    <Form
      key="unique_key_0"
      onSubmit={onSubmit}
      render={({ handleSubmit, form, submitting, pristine, values }) => (
        <form onSubmit={handleSubmit} key="unique_key_1" id="unique_id_1">
          <Field
            key="unique_key_2"
            id="unique_id_2"
            name="email"
            component={({ input: { onChange, value }, label }) => (
              <input
                key="unique_key_3"
                id="unique_id_3"
                type="text"
                value={value}
                onChange={onChange}
              />
            )}
          ></Field>
        </form>
      )}
    />
  );
}

Вход теряет фокус после каждого нажатия клавиши. В devtools я вижу, что HTML form создается каждый раз заново (он мигает розовым). Однако сам компонент React проходит рендеринг только один раз.

Есть похожие вопросы, но все они предлагают использовать уникальные ключи. Такое решение, похоже, здесь не работает.

Почему ввод снова и снова теряет фокус? Как мне это исправить?

https://codesandbox.io/s/busy-torvalds-91zln


person John Smith    schedule 04.02.2020    source источник


Ответы (1)


Поскольку для компонента используется встроенная лямбда-выражение, его идентификатор изменяется при каждой визуализации.

Хотя, согласно многим другим вопросам, уникального ключа должно быть достаточно, перенос функции component за пределы главного компонента полностью устраняет ее.

person John Smith    schedule 05.02.2020