如何从存储本身获取在存储上调度的最后一个操作类型

How to get last action-type dispatched on the store from the store itself?

本文关键字:存储 调度 最后一个 操作 类型 获取      更新时间:2023-09-26

我正在创建一个组件,该组件使用Redux架构处理状态(是的,根据定义,这可能很糟糕,因为组件应该将状态委托给应用程序,但无论如何)。

此组件接受不同的道具。当我必须处理回调时,我的问题就来了。让我们举一个实际的例子来更好地描述这一点。

假设我们需要像<App onSubmit={() => {}} />这样的组件。

当组件得到挂载时,我们可以创建一个存储,这样所有内部组件都可以调度操作/订阅更改等。

尝试可能是执行一个名为submit()操作。通过这种方式,商店将知道要应用的更改,因此任何订阅者都会知道,并且有人会在提交回调时调用此

所以代码看起来像:

class App extends Component {
  constructor (props) {
     super(props)
     this.subscriber = this.subscriber.bind(this)
  }
  componentWillMount() {
    this.store = createStore()
    this.store.subscribe(this.subscriber)
  }
  subscriber (action) {
    if (action.type === 'submit')
      this.props.onSubmit()
  }
  render () {
    return (
      <Provider store={this.store}>
         <FooComponent />
      </Provider>
    )
  }
}

问题是,尽管在调度的每个操作上都调用subscriber,但订阅者无法知道调度的最后一个操作是什么。因此,无法知道何时调用onSubmit

  • 我们如何使用subscriber来了解商店的变化
  • 我应该停止在这里尝试冗余架构吗

这是Redux中的反模式。

没有所谓的"最后一次操作",因为Redux保留在发生多个嵌套调度时只通知您一次的权利。

相反,您应该将局部副作用与动作一起执行。Redux Thunk是一种流行的方法。如果你需要更多的脱钩,你可能会喜欢Redux Saga。