React-Native this.setState() 不工作
React-Native this.setState() is not working
我无法让 react-native 的 this.setState();
工作。
当我 运行 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>
);
}
});
您的登录组件 onUpdate 方法可能是使用无法序列化的对象调用的。例如它可以包含函数,或者循环引用。
在您的 onUpdate 方法中,您应该从 val 参数中选择您感兴趣的内容,并将其插入到状态中。像这样:
this.setState({
userName: val.userName,
userId: val.userId
});
或发送到 onUpdate 的对象中包含的任何内容。
我能够通过使用 Flux 架构来解决这个问题。我使用了在这里找到的 McFly 包:https://github.com/kenwheeler/mcfly
我无法让 react-native 的 this.setState();
工作。
当我 运行 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>
);
}
});
您的登录组件 onUpdate 方法可能是使用无法序列化的对象调用的。例如它可以包含函数,或者循环引用。
在您的 onUpdate 方法中,您应该从 val 参数中选择您感兴趣的内容,并将其插入到状态中。像这样:
this.setState({
userName: val.userName,
userId: val.userId
});
或发送到 onUpdate 的对象中包含的任何内容。
我能够通过使用 Flux 架构来解决这个问题。我使用了在这里找到的 McFly 包:https://github.com/kenwheeler/mcfly