我正在使用优秀的parse-react库让Parse和ReactJS很好地协同工作(nb我只玩了几个小时,如果我误解了reactjs的任何基础知识,那么道歉)。 一切顺利,直到我想查询当前用户创建的所有对象的表(Parse.user.current())
observe方法在加载时正常工作,并使用正确的对象(当前用户创建的对象)呈现视图。但是,如果我改变数据并添加新对象,则视图不会重新渲染。
抽象代码:
module.exports = React.createClass({
mixins: [ParseReact.Mixin],
getInitialState: function() {
return {
selected: null
};
},
observe: function() {
return {
places: (new Parse.Query('Place'))
.equalTo('user', Parse.User.current())
.descending('createdAt')
};
},
clickHandler: function(event) {
var id = event.target.id;
if (id === 'new') {
ParseReact.Mutation.Create('Place', {
name: 'New Place',
user: Parse.User.current()
}).dispatch();
} else if(id.indexOf('Place:') === 0) {
this.setState({
selected: id.substring(6)
});
}
},
render: function() {
var that = this;
var navItems = this.data.places.map(function(place) {
return (
<UserNavItem id={place.id} key={place.id} label={place.name} selected={that.state.selected === place.objectId} onClick={that.clickHandler}/>
);
});
return (
<ul>
{navItems}
<UserNavItem id='new' label='+ New Place' onClick={this.clickHandler} />
</ul>
);
}
});
如果我删除了指定用户的查询部分:
.equalTo('user', Parse.User.current())
然后它起作用;添加后,新的地点对象会出现在列表中。
有谁知道我做错了什么?
我是否错误地使用了Parse查询?当看起来像这样一个常见的用例时,获取与当前用户有关的数据有点令人感到奇怪吗?
谢谢!
答案 0 :(得分:3)
解决方案是在Parse中成功创建新对象时调用组件的.refreshQueries()
方法,如here所述。
我的更新示例:
ParseReact.Mutation.Create('Place', {
name: 'New Place',
user: Parse.User.current()
})
.dispatch()
.then(function() {
this.refreshQueries();
}.bind(this));
非常感谢Joshua Sierles在ParseReact github repo上指出我的解决方案。如果你在SO Joshua,如果你在这里发表答案,我会给你信用:D