reactjs - React Hooks,如何使用 ReactDom 访问挂载的 parentNode
问题描述
我目前正在将我的react 组件迁移到 react 挂钩,但在访问已安装的 DOM 元素的一种特定情况下遇到了困难。
我的组件使用React.class
结构:
import { Component } from "react";
import ReactDOM from "react-dom";
class LineGraph extends Component {
componentDidMount() {
this.element = ReactDOM.findDOMNode(this).parentNode;
}
render() {
return "";
}
}
现在使用反应钩子,ReactDOM.findDOMNode(this)
抛出以下错误:
类型错误:react_dom__WEBPACK_IMPORTED_MODULE_1___default.a.findDOMNode(...) 为空
查看ReactDOM#findDOMNode文档,我尝试在返回的空 div 上使用引用,但在几个绘制元素变量之后变为null
。
import React, { useState, useEffect } from "react";
import ReactDOM from "react-dom";
export default function LineGraph () {
let myRef = React.createRef();
useEffect(() => {
element = ReactDOM.findDOMNode(myRef.current).parentNode;
}, []);
return (
<div ref={myRef}></div>
);
}
我正在寻找一种干净的方式来访问注入/安装我的反应代码的 DOM 元素。
就上下文而言,我的目标是使用 d3 库注入 svg 内容,我的代码可以很好地与组件配合使用。
解决方案
问题是访问参考的时间。
尝试使用useRef
带有监听器的钩子进行myRef
更改,并在它具有有效值时读取它:
import React, { useState, useEffect, useRef } from 'react';
import ReactDOM from 'react-dom';
export default function LineGraph() {
const myRef = useRef();
useEffect(() => {
if (myRef.current) {
console.log(myRef.current.parentNode)
}
}, [])
return <div ref={myRef}></div>;
}
推荐阅读
- mongodb - 按 mongo db 查询中 Map 对象的值属性总和(如果它等于 true)排序
- javascript - 我可以使用 for 循环来创建一系列承诺吗?
- javascript - 为什么我没有完成 POSTMAN 的 PUT 请求?
- javascript - 如何按年份将数据与付费和未付费值分组
- javascript - 如何定义一个可以在打字稿中未定义的变量?
- excel - 通过python访问excel文件时如何让excel中的rand()函数重新运行
- python - 如何注册要在垃圾收集 (GC) 开始并完成时调用的 python 函数?
- verilog - 输出处于未定义状态
- r - 在 R 中创建一个绑定指数列
- json - 如何使用本地路径将图像存储在 json 文件中?