componentInstance.setState在0.11.0中未定义

时间:2014-07-22 14:21:03

标签: javascript reactjs

我在名为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中尝试了它,它运行正常。可能的错误或我错过了什么?

1 个答案:

答案 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