Заявление не достигается после установки состояния в реакции ES-6

В этом коде реакции я пытаюсь установить данные в текущее состояние. После установки данных в состояние мне нужно использовать их в фиксированной таблице данных. Для этого я написал, как показано ниже. Основная проблема заключается в том, что оператор рядом с < strong>"this.setState" в componentDidMount не выполняется/достигается, где мне нужно вызвать функцию таблицы данных. вот мой код:

     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, любая помощь приветствуется.


person Hussian Shaik    schedule 08.09.2015    source источник
comment
Я не думаю, что это проблема, связанная с электронами.   -  person Yan Foto    schedule 08.09.2015


Ответы (2)


Добавьте обработчик catch в свой Promise. Я полагаю, вы получаете ошибку.

person gyzerok    schedule 08.09.2015
comment
да, тогда я получил эту ошибку: нарушение инварианта: дочерний тип должен быть ‹FixedDataTableColumn/› или ‹FixedDataTableColumnGroup/› - person Hussian Shaik; 08.09.2015
comment
Вот в чем проблема. Решите это, и все будет работать так, как ожидалось. - person gyzerok; 09.09.2015

Привет, может это твоя проблема,

Фейсбук:

setState() не сразу изменяет this.state, а создает отложенный переход состояния. Доступ к this.state после вызова этого метода потенциально может вернуть существующее значение. Нет гарантии синхронной работы вызовов setState, и вызовы могут быть объединены в пакеты для повышения производительности. setState() всегда будет запускать повторный рендеринг, если логика условного рендеринга не реализована в shouldComponentUpdate(). Если используются изменяемые объекты и логика не может быть реализована в shouldComponentUpdate(), вызов setState() только тогда, когда новое состояние отличается от предыдущего, позволит избежать ненужного повторного рендеринга.

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

второй аргумент — это функция обратного вызова, которая вызывается после установки состояния.

Надеюсь это поможет:)

Изменить: я не видел инвариантной ошибки (из комментария, не могли бы вы указать полную ошибку)

person Danillo Felixdaal    schedule 08.09.2015