在反应ES-6中设置State之后没有达成声明

时间:2015-09-08 06:49:26

标签: reactjs electron es6-promise fixed-data-table

在这个反应代码中我试图将数据设置为当前状态,在将数据设置为状态之后我需要在固定数据表中使用它。为了实现它,我写了如下。主要问题是声明在 componentDidMount “this.setState ”旁边没有执行/到达我需要在那里调用数据表函数的位置。 这是我的代码:

     export default class Main extends React.Component {
        constructor(props) {
            super(props);
            this.state = {
                result: [],
                loading: false,
                filteredRows: null,
                filterBy: null,
            };
        }
        getZipData() {
            //Here i got the data from server 
        }
        componentDidMount() {
            this.getZipData().then((data)=>{
                console.log("data:"+data.length);
                this.setState({result:data,loading:true});  //state successfully set here.
                console.log("result:*******************"+this.state.result.length); //this console is not printed
this._filterRowsBy(this.state.filterBy)
            });

        };
        _rowGetter(rowIndex){
            alert("row Getter");
            return this.state.filteredRows[rowIndex];
        }
        _filterRowsBy(filterBy){
            var rows = this.state.result.slice();
            var filteredRows = filterBy ? rows.filter((row)=>{
                return row.RecNo.toLowerCase().indexOf(filterBy.toLowerCase()) >= 0
            }) : rows;
            this.setState({
                filterRows,
                filterBy,
            })
        }
        _onFilterChange(e){
            this._filterRowsBy(e.target.value);
        }
        render() {
            if(this.state.loading==false) {
                return (
                    <div className="row-fluid">
                        <img className="col-sm-6 col-sm-offset-3 col-xs-6 col-xs-offset-3"
                             src="http://www.preciseleads.com/images/loading_animation.gif"/>
                    </div>
                )
            }
            else{
                console.log("result:////////////////////"+this.state.result.length); //this console is printed
                console.log("loading completed");
                return(
                    <div>
                       <!-- fixed data table code goes here -->
                    </div>
                )
            }

        }
    }

状态已成功更新,但在未达到该语句后,IN componentDidMount , 任何帮助非常感谢。

2 个答案:

答案 0 :(得分:1)

为Promise添加一个catch处理程序。我想你得到了一个错误。

答案 1 :(得分:0)

嗨,这可能是你的问题,

Facebook的:

  

setState()不会立即改变this.state但会创建一个   待定状态转换。调用后访问this.state   方法可以返回现有值。没有   保证调用setState和调用的同步操作   为获得业绩增长而受到批评。 setState()将始终触发a   除非实现条件渲染逻辑,否则重新渲染   shouldComponentUpdate()。如果正在使用可变对象而且   逻辑无法在shouldComponentUpdate()中实现,调用   setState()仅在新状态与先前状态不同时   将避免不必要的重新渲染。

  this.setState({result:data,loading:true}, () => {
    // Your logic
  });

第二个参数是一个回调函数,在设置状态后调用。

希望这会有所帮助:)

编辑:我没有看到不变的错误,(从评论中,你可以提供完整的错误)