如何在流路由器中停止订阅

时间:2015-03-27 03:28:30

标签: javascript meteor reactjs

我正在尝试根据路线上的参数加载不同的第三方数据。路线不会改变,只是发送给它的参数。

我需要停止正在提取数据的订阅,清除数据,然后发送新的api请求来填充订阅。

我正在使用带有FlowRouter的react-meteor(它效果很好!)

- view.jsx -

View = ReactMeteor.createClass({
    getMeteorState: function(){
        return {
            feed: Feed.find().fetch()
        }
    },

    render: function(){
        return (
             {this.state.feed.map(function(post, i){
                 return <ViewPost data={post} key={i} />
             })}
        )
    }

})

- menu-list-item.jsx -

MenuListItem = ReactMeteor.createClass({
    stopFeedSubscription: function(){
        FlowRouter.stop('feedSub')
        Feed.remove({})
    },

    render: function(){
        var route = "//view/"+this.props.data._id
        return (
                <li key={this.props.data._id} className="collection-item" data-post={this.props.data.name}>
                    <a href="#" data-route={route} className="btn-post-list" onClick={this.stopFeedSubscription}>{this.props.data.name}</a>
                </li>
            )
    }
})

当点击菜单项时,我想停止任何传入数据到该订阅并从中删除所有内容。当重新呈现/ view /:id时,会发生对第三方api的新调用,并且它会抓取新数据。

所有这些都有效,除非单击菜单项时数据仍然存在,它将显示在新路径中,该路径应显示不同的数据。

1 个答案:

答案 0 :(得分:3)

Flow Router没有办法停止订阅。我们可能也没有。如果您需要类似的东西,请尝试在React Components中管理订阅。

我们可以使用SubsManager。无论如何,不​​确定这是你需要的。

也可以在路由器级别执行此操作。

尝试通过获取参数来定义路由器中的订阅。因此,当您需要停止它时,将您的应用程序移动到不同的路线。然后,您之前的订阅会自动停止。

默认情况下,只有当前路由上定义的订阅处于活动状态。更改路线时,以前的路线将被取消激活。