【问题标题】:How to get last action-type dispatched on the store from the store itself?如何从商店本身获取商店上发送的最后一个动作类型?
【发布时间】:2016-07-21 16:46:11
【问题描述】:

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

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

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

我们可以在组件mount创建一个商店,这样所有内部组件都可以调度操作/订阅更改等。

尝试可能是有一个名为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 架构吗?

【问题讨论】:

    标签: javascript reactjs redux


    【解决方案1】:

    这是 Redux 中的反模式。

    没有所谓的“最后一个动作”,因为 Redux 保留在多个嵌套调度的情况下只通知您一次的权利。

    相反,您应该一起与操作一起执行本地副作用。 Redux Thunk 是一种流行的方法。如果您需要更多解耦,您可以改用 Redux Saga。

    【讨论】:

      猜你喜欢
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      • 2013-12-11
      • 1970-01-01
      • 2011-11-19
      • 2019-11-20
      • 1970-01-01
      相关资源
      最近更新 更多