【发布时间】:2020-01-21 15:17:05
【问题描述】:
我正在尝试在反应的父组件上创建一个 html 元素,并在子组件中访问该组件 div,然后我可以从子组件在 div 中附加新元素。
经过多次尝试,我无法在子构造函数上修复 props.canvasDivElement.current = null。
我尝试使用 REF 并且不使用 refs 来做到这一点......到目前为止没有运气。
有什么想法吗?
父组件长这样:
import React from "react";
import ReactViewer from "../ReactViewer/ReactViewer";
export default class CanvasWrapper extends React.Component {
private _divElement: React.RefObject<HTMLDivElement>;
constructor(props: any) {
super(props);
this._divElement = React.createRef<HTMLDivElement>();
}
render() {
return (
<div>
<ReactViewer canvasDivElement={this._divElement}></ReactViewer>
</div>
);
}
}
子组件:
import React from "react";
type ReactViewerState = {
};
type ReactViewerProps = {
canvasDivElement: React.RefObject<HTMLDivElement>;
};
export default class ReactViewer extends React.Component<ReactViewerProps, ReactViewerState> {
constructor(props: ReactViewerProps, state: ReactViewerState) {
super(props, state);
const newElement = document.createElement('span');
newElement.innerText = 'element';
props.canvasDivElement.current!.appendChild(newElement); //current is null
}
render() {
return (
<div ref={this.props.canvasDivElement} />
);
}
}
【问题讨论】:
-
“我正在尝试在父组件上创建一个 div 元素,以响应并访问子组件内的组件 div,然后我可以在子组件中的 div 中附加新元素。”这听起来像是你试图通过绕过 React 的基本原则来解决 React 中的问题。你也可以在 vanilla JS 中执行此操作。在 React 中,父母应该负责渲染自己的孩子。
标签: javascript reactjs typescript