У меня есть повторно используемый компонент <Layout />
, который позволяет мне передавать пользовательские компоненты в свойства content
и sidebar
.
В одном случае я помещаю поле ввода в содержимое, которое является управляемым компонентом и использует useState()
для обработки данных.
Однако я обнаружил, что моя клавиатура теряет фокус всякий раз, когда я ввожу ввод. Похоже, вся форма перерисовывается, и я не могу остановить это.
Это было нормально, когда мой код был полностью встроенным, но после его рефакторинга для использования компонента <Layout />
он имеет некоторые странные эффекты.
- Я не хочу использовать какие-либо дополнительные библиотеки, кроме основной React 16.x.
- Я пробовал использовать
useCallback()
, ключи, имена, идентификаторы, ссылки - все безрезультатно - Я переместил функции обратного вызова за пределы области действия и передал значения в соответствии с этим ответом, но проблема не устранена.
import React, { useState } from 'react';
function Layout({ content: Content, sidebar: Sidebar }) {
return (
<>
<div>
<Content />
</div>
<div>
<Sidebar />
</div>
</>
);
}
function Page() {
const [value, setValue] = useState('');
return (
<>
<Layout
content={() => (
<input
value={value}
onChange={(event) => setValue(event.target.value)}
/>
)}
sidebar={() => (
<p>Lorem ipsum...</p>
)}
/>
</>
);
}
export default Page;