进度条与react.js

时间:2015-05-20 19:45:03

标签: javascript sockets reactjs

我试图实施进度条,但反应似乎并不喜欢这个想法。我得到了

  

警告:setState(...):只能更新已安装或安装的组件。这通常意味着您在已卸载的组件上调用了setState()。这是一个无操作。

作为错误,尽管在调用函数时安装了元素。这是代码:

SocketAction.js

var x = new MainApplication;
window.socket.on('label-downloads:Shipping\\Events\\ShippingProgress',function(event){
    x.showProgress(event);
});

MainApplication.js

showProgress(e){
    console.log(window.performance.now());
    this.setState({
        progressBar:{
            height:'4px',
            background: 'green',
            position:'absolute',
            left:250,
            top: 70,
            width: e + '%'
        }
    })
},

ProgressBar在MainApplication.js中:

<div style={this.state.progressBar}></div>

元素的初始状态是

        progressBar:{
            height:'4px',
            background: 'green',
            width:1,
            position:'absolute',
            left:250,
            top: 70
        }

我不明白为什么它不应该被安装......

编辑:

这是我传递给browserfy的文件:

import MainApplication from './project/MainApplication';
import MainSocketActions from './project/MainSocketActions';
React.render(<MainApplication />, document.getElementById('content'));

完成MainSocketAction.js:

import MainApplication from './MainApplication';
var x = new MainApplication;

    window.socket = io('http://localhost:3000');
    window.socket.on('connect', function () {
    });
    window.socket.on('label-downloads:Shipping\\Events\\ShippingProgress',function(event){
        x.showProgress(event);
    });

1 个答案:

答案 0 :(得分:1)

此:

var x = new MainApplication;

正在创建一个新的MainApplication,但它永远不会被React呈现。然后你要创建另一个(不同的)稍后再渲染的那个。我想你想要的东西:

var x = React.render(<MainApplication />, document.getElementById('content'));
window.socket.on('label-downloads:Shipping\\Events\\ShippingProgress',function(event){
    x.showProgress(event);
});