我们如何将数据传递给this.state - React.js?

时间:2016-11-20 01:21:35

标签: reactjs d3.js

我在JSX文件和构造函数中创建了一个React组件:

this.state = {data: [[200,100],[50,60],[100,300]] };

这完全没问题。它运行得很好。

但是,如果我添加:

this.state = {linedata: [{x:200,y:100},{x:50,y:60},{x:100,y:300}] };

我明白了:

d3.js:265 Uncaught TypeError: Cannot read property 'length' of undefined

我很遗憾为什么会这样。数据应该以某种方式格式化吗?

2 个答案:

答案 0 :(得分:3)

您是否尝试在初始分配后重新分配Sub Tester() Const S_MATCH As String = "td[width='100'][class='ListMainCent'][rowSpan='1'][colSpan='1']" Dim e, tbl, bHit As Boolean '... 'load page etc '... 'get all the matching rows and cycle though them For Each e In IEDoc.querySelectorAll(S_MATCH) 'did we get to the table of interest yet? If Not bHit Then Set tbl = e.ParentNode.ParentNode.ParentNode.ParentNode. _ ParentNode.ParentNode.ParentNode If IsPartUsageTable(tbl) Then bHit = True End If If bHit Then 'we reached the table of interest, so ' do something with e End If Next End Sub Function IsPartUsageTable(tbl) As Boolean Dim e, rv As Boolean For Each e In tbl.getElementsByClassName("SectionHead") If Element.innerHTML = "Part Usage" Then rv = True Exit For End If Next IsPartUsageTable = rv End Function ?你永远不应该手动设置组件状态;而是使用this.setState

答案 1 :(得分:1)

在React中,每个组件的state都是一个简单的JavaScript对象。在您的第一个示例中,由于您说组件呈现得很好,因此您的组件似乎使用了data的{​​{1}}属性。

如果您将其更改为this.state,则this.state.linedata将为this.state.data。您应该更新您的组件,以便从undefined而不是this.state.linedata读取。

您编写this.state.data函数的方式以及在代码中使用d3的方式的更多示例将有助于您提供更精确和有用的答案。