React-Native this.setState() не работает

Я не могу заставить работать this.setState(); React Native.

Когда я запускаю метод onUpdate, я вижу, что возвращается правильный объект JSON.

Проблема в том, что при вызове функции setState ничего не происходит и метод не работает. Ниже него больше не выполняется код. Он также не выполняет повторную визуализацию компонента после функции setState.

Вот мой код компонента ниже:

var App = React.createClass({

  getInitialState: function() {
    return {
      view: Login,
      menu: false,
    }
  },

  componentDidMount: function() {
    var self = this;
  },

  onUpdate: function(val){
    // val is verified as an object here when I log to console
    this.setState(val);
    // nothing runs here. The above line errors out the function
  },

  render: function () {
    if(this.state.view == 'Home'){
      this.refs.sideMenu.frontView = Home;
      return (
        <View style={styles.container} >
          {sideMenu}
        </View>
      );
    }
    return (
      <View style={styles.container} >
        <Login onUpdate={this.onUpdate} />
      </View>
    );
  }
});

person TimDOES    schedule 06.04.2015    source источник
comment
Я думаю, нам нужно также посмотреть, что делает Login. Вы утверждаете, что val - это объект, но если он не работает, происходит что-то подозрительное... :)   -  person Samuli Hakoniemi    schedule 06.04.2015
comment
Также было бы полезно узнать, какую ошибку вы получаете при вызове setState.   -  person Brennan    schedule 08.04.2015


Ответы (2)


Возможно, ваш метод onUpdate компонентов входа вызывается с объектом, который не может быть сериализован. Например, он может содержать функции или циклические ссылки.

В вашем методе onUpdate вы должны выбрать интересующий вас материал из аргумента val и вставить его в состояние. Что-то вроде этого:

this.setState({
userName: val.userName,
userId: val.userId
});

или все, что включено в объект, который отправляется в onUpdate.

person Sten    schedule 13.04.2015
comment
Что вы подразумеваете под объектом, который нельзя сериализовать? - person ryanwebjackson; 10.05.2020

Я смог исправить проблему, используя архитектуру Flux. Я использовал пакет McFly, найденный здесь: https://github.com/kenwheeler/mcfly

person TimDOES    schedule 12.05.2015