- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 D3 绘制条形图并通过 React 的 render 方法渲染它。我的index.js如下,
import React from 'react';
import ReactDOM from 'react-dom';
import './Styles/index.css';
import BarChart from './Components/BarChart'
class App extends React.Component {
render() {
return (
<div>
<h3> SmaRT - A Dash Board</h3>
<BarChart data={[1,3,5,7,11]} size={[500,500]}/>
</div>
);
}
}
ReactDOM.render( <App/>, document.getElementById('app'))
本质上,我将数据和大小传递给 BarChart 函数。我的BarChart.js如下,
import React from 'react';
import { scaleLinear } from 'd3-scale';
import { max } from 'd3-array';
import { select } from 'd3-selection';
import '../Styles/index.css';
class BarChart extends React.Component {
constructor(props) {
super(props);
this.createBarChart = this.createBarChart.bind(this);
}
componentDidMount(){
this.createBarChart();
}
componentDidUpdate(){
this.createBarChart();
}
createBarChart() {
const node = this.node;
const dataMax = max(this.props.data);
const yScale = scaleLinear().domain([0,dataMax]).range([0, this.props.size[1]]);
select(node).select('div').data(this.props.data).enter().append('div')
select(node).select('div').data(this.props.data).exit().remove()
select(node).select('div').data(this.props.data).style('fill', '#FE9922').attr('x', (d,i) => i * 25).attr('y', d => this.props.size[1] - yScale(d))
.attr('height', d => yScale(d)).attr('width', 25)
}
render(){
return <svg ref={node => this.node = node} width={500} height={500}></svg>
}
}
export default BarChart;
检查页面元素后发现,svg 元素正在按照 BarChart.js 中规定的尺寸进行渲染,但该函数并未占用传递的“size”参数。
另外,react开发者工具通过报错如下,
Uncaught TypeError: Cannot read property 'ownerDocument' of null
at new EnterNode (enter.js?19a3:9)
at Uncaught TypeError: Cannot read property 'ownerDocument' of null
at new EnterNode (enter.js?19a3:9)
at bindIndex (data.js?1427:21)
at Selection.__webpack_exports__.a [as data] (data.js?1427:100)
at BarChart.createBarChart (BarChart.js?1e85:26)
at BarChart.componentDidMount (BarChart.js?1e85:14)
at eval (ReactCompositeComponent.js?063f:264)
at measureLifeCyclePerf (ReactCompositeComponent.js?063f:75)
at eval (ReactCompositeComponent.js?063f:263)
at CallbackQueue.notifyAll (CallbackQueue.js?7abf:76)
at ReactReconcileTransaction.close (ReactReconcileTransaction.js?2d36:80)
EnterNode @ enter.js?19a3:9
bindIndex @ data.js?1427:21
__webpack_exports__.a @ data.js?1427:100
createBarChart @ BarChart.js?1e85:26
componentDidMount @ BarChart.js?1e85:14
(anonymous) @ ReactCompositeComponent.js?063f:264
measureLifeCyclePerf @ ReactCompositeComponent.js?063f:75
(anonymous) @ ReactCompositeComponent.js?063f:263
notifyAll @ CallbackQueue.js?7abf:76
close @ ReactReconcileTransaction.js?2d36:80
closeAll @ Transaction.js?91bc:209
perform @ Transaction.js?91bc:156
batchedMountComponentIntoNode @ ReactMount.js?0cc2:126
perform @ Transaction.js?91bc:143
batchedUpdates @ ReactDefaultBatchingStrategy.js?bdd7:62
batchedUpdates @ ReactUpdates.js?be0d:97
_renderNewRootComponent @ ReactMount.js?0cc2:319
_renderSubtreeIntoContainer @ ReactMount.js?0cc2:401
render @ ReactMount.js?0cc2:422
(anonymous) @ index.jsx?cca3:17
(anonymous) @ bundle.js:1047
__webpack_require__ @ bundle.js:20
(anonymous) @ bundle.js:63
(anonymous) @ bundle.js:66
bindIndex (data.js?1427:21)
at Selection.__webpack_exports__.a [as data] (data.js?1427:100)
at BarChart.createBarChart (BarChart.js?1e85:26)
at BarChart.componentDidMount (BarChart.js?1e85:14)
at eval (ReactCompositeComponent.js?063f:264)
at measureLifeCyclePerf (ReactCompositeComponent.js?063f:75)
at eval (ReactCompositeComponent.js?063f:263)
at CallbackQueue.notifyAll (CallbackQueue.js?7abf:76)
at ReactReconcileTransaction.close (ReactReconcileTransaction.js?2d36:80)
EnterNode @ enter.js?19a3:9
bindIndex @ data.js?1427:21
__webpack_exports__.a @ data.js?1427:100
createBarChart @ BarChart.js?1e85:26
componentDidMount @ BarChart.js?1e85:14
(anonymous) @ ReactCompositeComponent.js?063f:264
measureLifeCyclePerf @ ReactCompositeComponent.js?063f:75
(anonymous) @ ReactCompositeComponent.js?063f:263
notifyAll @ CallbackQueue.js?7abf:76
close @ ReactReconcileTransaction.js?2d36:80
closeAll @ Transaction.js?91bc:209
perform @ Transaction.js?91bc:156
batchedMountComponentIntoNode @ ReactMount.js?0cc2:126
perform @ Transaction.js?91bc:143
batchedUpdates @ ReactDefaultBatchingStrategy.js?bdd7:62
batchedUpdates @ ReactUpdates.js?be0d:97
_renderNewRootComponent @ ReactMount.js?0cc2:319
_renderSubtreeIntoContainer @ ReactMount.js?0cc2:401
render @ ReactMount.js?0cc2:422
(anonymous) @ index.jsx?cca3:17
(anonymous) @ bundle.js:1047
__webpack_require__ @ bundle.js:20
(anonymous) @ bundle.js:63
(anonymous) @ bundle.js:66
任何人都可以阐明我做错了什么以及如何解决这个问题吗?非常感谢。
最佳答案
发现错误,是由于BarChart.js的createBarChart函数中的select语句造成的
select(node).selectAll('rect')
而不是
select(node).select('div')
不知何故,代码放错了地方。 D3 中的 selectAll 选择作为参数提供给它的所有匹配关键字,在本例中为“rect”。 SVG 应使用提供的内容绘制矩形。而这正是必须渲染的。
感谢那些试图在头脑中理解和解决/调试这个问题的人。
关于javascript - 未捕获的类型错误 : Cannot read property 'ownerDocument' of null - ReactJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45238851/
我在我的项目中使用了 bootstrap 的几个组件,但是其中两个组件“accordion”和“modal”在 IE8 中根本不起作用。根据 bootstrap 的文档,它支持 IE8,我假设 Acc
我正在学习网络组件。要获取模板,我需要这样做: The sky is blue var tmpl = (document.currentScript||document._curre
我正在自学 AJAX 以 AJAXify 我的网站。在我的模板中,我有以下 JS 代码从 View 中获取一些 JSON 数据,然后将数据附加到 div。 function filter(type)
这是我的代码 $.ajax({ url: "http://localhost:42046/WebService1.asmx/HelloWorld", type: 'get'
我尝试使用 D3 绘制条形图并通过 React 的 render 方法渲染它。我的index.js如下, import React from 'react'; import ReactDOM from
我正在查看 MDN和 W3C资源以查明 ownerDocument 到底是什么以及它是如何工作的? 正如我在任何条件下测试的那样 node.ownerDocument == window.docume
我使用 fullcalendar.js 和 Scheduler.js 插件在客户的 ASP.NET WebForms 站点上实现了一个调度程序。它在我的本地计算机上运行起来就像一个魅力,但是当我将它部
当我单击导出按钮时会发生这种情况 $scope.export = function() { html2canvas(document.getElementById('balance
我有一个通过 Axios 连接到 Node 后端的 ReactJS 应用程序。我正在尝试更新,并且有效负载是正确的,但我有一个尴尬的问题:它说我没有发送需要更新的 _id 。这是我的 mongoose
如何在脚本 type="module"中获取 ownerDocument? text let owner = document.currentScript.ownerDocument /
我收到此错误: Uncaught TypeError: Cannot read property 'ownerDocument' of null 这是来自设置 .data() 的一行到最近由 d3 添
这是一个返回图像宽度的函数,给定图像的 url: async function getImageWidthByUrl(imgUrl) { const imgEl = document.create
我是一名优秀的程序员,十分优秀!