如何从商店本身获取在商店中调度的最后一个动作类型?

car*_*sba 0 javascript reactjs redux

我正在创建一个使用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>
    )
  }
}
Run Code Online (Sandbox Code Playgroud)

问题在于,尽管subscriber在调度的每个操作上调用,但订阅者无法知道调度的最后一个操作是什么.所以没有办法知道什么时候打电话onSubmit.

  • 我们怎样才能subscriber知道商店的变化?
  • 我应该停止在这里尝试redux arquitecture吗?

Dan*_*mov 8

这是Redux中的反模式.

没有"最后一个动作"这样的东西,因为Redux保留在几次嵌套调度的情况下只通知您一次的权利.

相反,您应该与操作一起执行本地副作用.Redux Thunk是一种流行的方式.如果你需要更多的去耦,你可能会喜欢Redux Saga.