我正在创建一个使用Redux架构处理状态的组件(是的,这在定义上可能是不好的,因为组件应将状态委派给应用,但无论如何都应如此)。

该组件接受不同的道具。我的问题出在我必须处理回调时。让我们举一个实际的例子来更好地说明这一点。

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

我们可以在挂载组件时创建一个存储,以便所有内部组件可以分派操作/订阅更改/等。

尝试可能是执行名为submit()的操作。这样,商店将知道存在要应用的更改,因此任何订阅者都将知道并且有人将调用此onSubmit回调。

因此,代码如下所示:

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 arquitecture吗?

最佳答案

这是Redux中的反模式。

没有“最后的动作”之类的东西,因为Redux保留在多次嵌套调度的情况下仅一次通知您的权利。

相反,您应该与操作一起执行局部副作用。 Redux Thunk是一种流行的方法。如果您需要更多的去耦功能,则可以改用Redux Saga。

关于javascript - 如何从商店本身获取在商店上调度的最后一个 Action 类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38509964/

10-16 23:37