Мне трудно ориентироваться в этих понятиях, когда ребенок продолжает повторную визуализацию, потому что я передаю ему функцию от родителя. Эта родительская функция ссылается на значение редактора, draft js.
function Parent() {
const [doSomethingValue, setDoSomethingValue] = React.useState("");
const [editorState, setEditorState] = React.useState(
EditorState.createEmpty()
);
const editorRef = useRef<HTMLInputElement>(null);
const doSomething = () => {
// get draftjs editor current value and make a fetch call
let userResponse = editorState.getCurrentContent().getPlainText("\u0001");
// do something with userResponse
setDoSomethingValue(someValue);
}
return (
<React.Fragment>
<Child doSomething={doSomething} />
<Editor
ref={editorRef}
editorState={editorState}
onChange={setEditorState}
placeholder="Start writing..." />
<AnotherChild doSomethingValue={doSomethingValue}
<React.Fragment>
}
}
Компонент «Мой ребенок» - это просто кнопка, которая вызывает doSomething родительского объекта и вот так.
doSomething делает свое дело, а затем вносит изменения в состояние, которое затем передается в AnotherChild.
Моя проблема заключается в том, что каждый раз, когда editorState обновляется (то есть каждый раз, когда вы печатаете в редакторе) ), мой дочерний компонент перерисовывается. Разве это не нужно? И если так, как я мог избежать этого?
Если я передавал свой дочерний компонент строку и использовал React.Memo, он не рендерится, пока строка не изменится.
Так что же мне не хватает при передаче функции ребенку? Должен ли мой ребенок каждый раз перерисовываться?