javascript - 在 Express 中使用 React+D3
问题描述
我正在尝试在 Express 应用程序的 React 组件中使用 D3 。看起来这应该是一项相当容易的任务,但是遵循不针对 Express 应用程序的各种教程不起作用:在下面的示例中,我得到一个<!DOCTYPE html><div><p>D3 Example</p><svg></svg></div>
没有红色圆圈的空 svg ( )。
一个可能的解释是React.useEffect
它不在服务器上运行。但是,我不明白为什么在加载 Javascript后它不运行。无论如何,我找不到解决此问题的方法,因此将不胜感激任何有助于更好地理解它或解决方案的帮助:)
我在下面列出了我的相关代码。我对 Node 比较陌生,所以我尝试坚持 Express 示例约定。
应用程序.js
var simulationRouter = require('./routes/simulation');
var app = express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jsx');
app.engine('jsx', require('express-react-views').createEngine());
...
app.use('/simulation', simulationRouter);
路线/simulation.js
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
res.render('d3_show_nolib');
});
module.exports = router;
意见/d3_show_nolib.js
import React, { useEffect, useRef } from "react";
import { select } from "d3";
export default function App() {
const svgRef = useRef();
useEffect(() => {
const svg = select(svgRef.current);
const getData = () => {
svg
.append("circle")
.attr("r", 15)
.attr("fill", "red")
.attr("stroke", 1.5);
};
getData();
}, []);
return (
<div>
<p>D3 Exemple</p>
<svg ref={svgRef}></svg>
</div>
);
}
(我希望这可以作为以下单个 html 文件工作:
<html>
<head>
<script src="https://d3js.org/d3.v7.min.js"></script>
</head>
<body>
<svg id='svg'></svg>
<script>
var svg = d3.select('#svg');
svg.attr('width', 100)
.attr('height', 100);
svg
.append("circle")
.attr("r", 15)
.attr("fill", "red")
.attr("stroke", 1.5)
.attr('cx', 10)
.attr('cy', 10);
</script>
</body>
</html>
)
解决方案
推荐阅读
- java - AtomicBoolean 可以替换 volatile 布尔值吗?
- php - 在 PHP 中本地删除文件时如何删除 S3 存储桶中的对象
- c++ - 循环确实显示了错误的变量
- laravel-7 - 我在我的应用程序中使用 laravel 7.3,在新西兰地区只能访问主页
- bash - 如何将for循环值组合在一个以逗号分隔的变量中[unix脚本]
- ssis - 有没有办法使用变量将测试连接设置为 Azure 存储连接中的属性?
- javascript - 如何通过电子网模块发出传输文件的发布请求?
- bash - 降低 bash 脚本中“Sed”命令的时间复杂度
- c# - 向现有 json 模式添加额外字段并即时生成 c# 类
- python-3.x - 我更新了MacOS最新版本Monterey后,python无法执行?