我如何停止流路由器中的订阅

how do i stop a subscription in flow-router

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

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

我将 react-meteor 与 FlowRouter 结合使用(效果很好!)

--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} />
             })}
        )
    }

})

-- 菜单列表-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 被重新渲染时,对第 3 方的新调用 api 发生并获取新数据。

所有这些都有效,除了如果单击菜单项时数据仍在输入,它会显示在应该显示不同数据的新路由中。

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

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

也有一种方法可以在路由器级别执行此操作。

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

默认情况下,只有在当前路由上定义的订阅是活动的。更改路线时,之前的路线将被停用。