【问题标题】:Flux: programatic transition on async operation successFlux:异步操作成功的编程转换
【发布时间】:2015-12-23 10:15:10
【问题描述】:

我的通量工作流程到期this article

SignInView ===> AppActionCreators ===> SomeService  
                      |                   ||
                   Promise <============= ||              
                     ||
                     || ======================> SIGN_IN_SUCCESS

SignIn 视图调用AppActionCreators#signIn,后者调用SomeService。所有SomeService 方法都返回promise,所以AppActionCreators 在promise 解决后触发一个动作。

问题:什么是在singIn 成功时以编程方式转换到IndexView 的真正方法?请看代码:

AppActionCreators.js:

AppActionCreators = {
    signIn(username, password, signInCb) {
        SomeService.signIn(username, password).then(response => {
            //QUESTION: trigger action and make transition in Store or pass `signInCb` from `SignIn` view?
            AppDispatcher.dispatch({type: ActionTypes.SIGN_IN_SUCCESS, response});
            //Or?
            signInCb();
        });
    }
}

SignIn.react.js

class SignIn extends Component, Router.Navigation {
    handleSubmit(){
        const signInCb = () => this.transitionTo('index', {this.state.data})
        AppActionCreators.signIn(this.state.user,  this.state.password, signInCb);
    }
}

更新:改写版本的问题:使用 SIGN_IN_SUCCESS 操作 + 显示/隐藏登录/索引视图与传递转换回调?

【问题讨论】:

    标签: javascript reactjs flux react-router


    【解决方案1】:

    触发动作似乎比回调机制更“灵活”,我会这样做。我认为如果应用程序的状态在登录后发生更改并通过触发操作,您将允许商店适当地更改状态,这将更有意义。

    例如,设置登录用户名/显示图片。您将在您的响应中拥有它,并通过 Dispatching SignInSuccess 操作,商店将获取这些值并在商店中设置应用程序状态的 SignedInUserName 属性,然后发出该更改。

    我对 React-Router 不是很熟悉,并且不确定您将如何处理状态更改。

    【讨论】:

    • 是的,我完全同意你的看法。实际上,我的应用程序目前就是这样工作的。但是在这种特殊情况下让我感到尴尬的是,从处理 SIGN_IN_SUCCESS 的 Store 中的 emitChange 是不够的。相反,我应该进行过渡。从商店进行视图转换很奇怪
    • 相对于我上面的评论:如果我从 Store 执行 SIGN_IN_SUCCESS event 和 emitChange - 这意味着应该将 Index 视图呈现/订阅到 Store。因此事件将显示/隐藏视图,而不是转换。这看起来不像是真正的方式
    • 我明白你的意思。恐怕我对 React-Router 不太熟悉,因此无法评论显示/隐藏而不是转换的索引视图。
    猜你喜欢
    • 2020-11-06
    • 2015-12-13
    • 2015-03-03
    • 1970-01-01
    • 2018-08-07
    • 2014-07-01
    • 1970-01-01
    • 2023-03-16
    • 2021-07-14
    相关资源
    最近更新 更多