javascript - 如何在功能组件中访问 DOM
问题描述
我正在 reactJS 中创建一个速度计并使用一点香草语法,但是画布返回 null。如果我跑
const canvas = document.getElementById('dial__container');
在控制台中,div 会立即弹出。
这仅仅是画布尚未渲染的时间问题还是一些奇怪的 React 行为?
import React from 'react';
const canvas = document.getElementById('dial__container');
const ctx = canvas.getContext('2d');
const radius = canvas.height / 2;
const Speedometer = (props: any) => {
console.log(canvas); // null
return (
<div className="dial__wrapper">
<canvas id="dial__container" width="150" height="150" />
</div>
);
};
export default Speedometer;
解决方案
您正在尝试获取尚未呈现的节点。
在尝试获取画布之前,您可以componentDidMount
通过将组件转换为有状态(类组件)的组件来使用生命周期方法。但请记住,这被认为是非常糟糕的做法,并且永远没有必要:
componentDidMount(){
this.canvas = document.getElementById('dial__container');
}
另一种解决方案将暗示使用refs
,如另一个答案中链接的那样,这也被认为是一种不好的做法。
推荐阅读
- python - Pyspark中将结构类型大量列爆炸为两列键和值
- ios - 将子视图添加到 PDFView
- javascript - 如何在 AJV 中使用超模式?
- android - Frida - Java.perform() 使应用程序崩溃
- java - 在运行时更改安全策略属性
- html - 我的 div 容器中的背景颜色覆盖了视频元素
- sql - 如何根据给定的时间戳值(给出的示例)在 R 中创建一个间隔为 X 分钟的时间戳桶?
- javascript - 我怎样才能制作一个像 jQuery 的 slideUp() 一样的函数,但用于向上以外的方向?
- java - 无法在我的 android 应用程序中使用 StorageRefrence
- python - 计算具有多重性且无序的集合分区的计数