Parse React - 观察由Parse.User.current()

时间:2015-04-22 14:31:09

标签: javascript parse-platform reactjs

我正在使用优秀的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查询?当看起来像这样一个常见的用例时,获取与当前用户有关的数据有点令人感到奇怪吗?

谢谢!

1 个答案:

答案 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