gpt4 book ai didi

javascript - 回流 Action 执行后触发通知/回调

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:29:34 33 4
gpt4 key购买 nike

我最近在我的项目中使用了回流,这是一个让我很困惑的问题。
作为回流模式,我在我的 React 组件中调用操作,并在我的回流存储中获取正在监听这些操作的远程数据。我的组件会监听存储中数据的变化。例如获取项目列表。目前为止还好。
但有时,我想要一个通知,告诉我操作已成功执行。
例如,我有一个 UserStore、一个 UserActions 和一个监听 UserStore 的 LoginComponent。当用户输入用户名和密码并单击提交按钮时,LoginComponent 调用 UserActions.login(),我在 UserStore 中发送登录请求。登录成功后,UserStore从响应中获取用户信息。
这一次,我想在LoginComponent中给出一个提示,比如'登录成功'。我有两种方法可以做到,但我认为两者都不够好。

  1. 在 UserStore 的数据中给出一个标志,然后触发更改。 LoginComponent 在 UserStore 触发数据变化事件时得到这个标志,然后进行提示。因为 UserStore 不仅在登录成功时会触发数据变化,在其他一些情况下,比如从 cookies 或 sessionStorage 中获取用户信息,LoginComponent 必须为这个登录成功标志添加一个 if-else,如果是登录成功则提示。< br/>我认为这不是一个好的模式,因为该标志仅用于提示,而不是像用户信息这样的真实数据。如果我还想在用户更改密码后得到提示,我将需要另一个标志字段。
  2. 传递一个promise(或回调函数)给UserAction调用,登录成功后resolve这个promise,然后LoginComponent可以在promise.then中提示。它看起来比第一个好,但这不是有点反模式吗,因为通过操作传递给商店的 promise 可能会打破回流中的单向

我想问的是:解决这个问题的常见/合适的方法是什么?

我不是英语区人,不擅长英语表达。这是我在 stackoverflow.com 上的第一个问题。我不太确定我是否清楚地描述了我的问题。所以如果你对这个问题有什么建议,请告诉我,我会改进它以帮助其他关心这个问题的人。非常感谢!

最佳答案

您可以在触发器中包含一个参数。

export default class AppCtrl extends AppCtrlRender {
constructor() {
super();
this.state = getState();
}

componentDidMount = () => { this.unsubscribe = BasicStore.listen(this.storeDidChange); }
componentWillUnmount = () => { this.unsubscribe(); }
storeDidChange = (id) => {
switch (id) {
case 'data1': this.setState({Data1: BasicStore.getData1()}); break;
case 'data2': this.setState({Data2: BasicStore.getData2()}); break;
case 'data3': this.setState({Data3: BasicStore.getData3()}); break;
default: this.setState(getState());
}
}
}

import Reflux from 'reflux';

import Actions from '../actions/sa.Actions';
import AddonStore from './Addon.Store';
import MixinStoreObject from './Mixin.Store';

function _GotData(data) { this.data1 = data; BasicStore.trigger('data1'); }

let BasicStoreObject = {
init() { this.listenTo(AddonStore, this.onAddonTrigger); },
data1: {},
listenables: Actions,
mixins: [MixinStoreObject],
onGotData1: _GotData,
onAddonTrigger() { BasicStore.trigger('data2'); },
getData1() { return this.data1; },
getData2() { return AddonStore.data2; },
getData3() { return this.data3; }
}
const BasicStore = Reflux.createStore(BasicStoreObject);
export default BasicStore;

关于javascript - 回流 Action 执行后触发通知/回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34249078/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com