【发布时间】:2020-05-01 17:30:36
【问题描述】:
我无法在孩子不断重新渲染的这些概念中导航,因为我从父级传递了一个函数。这个父函数引用了一个编辑器的值,draftjs。
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>
}
}
My Child 组件只是一个调用父级的 doSomething 的按钮,仅此而已。
doSomething 做它的事情,然后对状态进行更改,然后将其传递给 AnotherChild。
我的问题是,只要 editorState 更新(即每次您在编辑器中键入),我的子组件就会重新呈现。这不是不必要的吗?如果是这样,我怎么能避免这种情况?
如果我向 Child 组件传递一个字符串并利用 React.Memo,除非字符串发生更改,否则它不会重新渲染。
那么我在将函数传递给孩子时缺少什么? 我的孩子应该每次都重新渲染吗?
【问题讨论】:
标签: reactjs typescript draftjs