我在名为DashboardPosition.js
的文件中有以下组件:
var DashboardPosition = React.createClass({
getInitialState: function() {
return {
items: []
};
},
render: function() {
return (
<div className="well well-sm dashboard-item">
This component has {this.state.items.length} items
</div>
);
}
});
然后我在我的页面中呈现这个没有问题,如下所示:
var dashboardPosition = <DashboardPosition />;
React.renderComponent(dashboardPosition, document.querySelector("#position"));
但是当我尝试以下内容时:
var dashboardPosition = <DashboardPosition />;
React.renderComponent(dashboardPosition, document.querySelector("#position"));
dashboardPosition.setState({
items: [{name: "AMD"}, {name: "LIQ"}, {name: "ELEC"}]
});
我收到以下错误:
Uncaught TypeError: undefined is not a function
dashboardPosition.setState
这似乎只发生在v0.11.0
。我已经在v0.10.0
中尝试了它,它运行正常。可能的错误或我错过了什么?
答案 0 :(得分:3)
这是一个从0.10.0开始的变化,它在开发版本中给你一个警告,在0.11.0中现在是一个&#34;突破变化&#34;。
当您创建组件的实例时,返回的是描述符,这只是呈现该组件所需的任何反应。以前到0.10.0,这恰好是实际的虚拟dom节点,这导致了许多反模式,并且消除了能够优化某些事物的反应的潜力。您不能再对返回的值执行任何操作,除了:
cloneWithProps
添加来制作更新的副本如果需要在DashboardPosition组件上设置setState,则需要在DashboardPosition中执行此操作。
如果从DashboardPosition中进行操作没有意义,那么您应该将items
作为道具传递,例如<DashboardPosition items={items} />
,并使用this.props.items
代替this.state.items
。