Javascript React Redux:将返回的数据分派到组件

Javascript React Redux:将返回的数据分派到组件,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我有一个组件,其窗体将添加一个项。提交表单时,我将使用redux发送一个异步操作,如下所示: _onSubmit(event) { const { dispatch } = this.props; const { data } = this.state; event.preventDefault(); dispatch(addItem(data)); } _onSubmit(event) { const { dispatch } = thi

我有一个组件,其窗体将添加一个项。提交表单时,我将使用redux发送一个异步操作,如下所示:

_onSubmit(event) {
    const { dispatch } = this.props;
    const { data } = this.state;
    event.preventDefault();

    dispatch(addItem(data));
  }
_onSubmit(event) {
        const { dispatch } = this.props;
        const { data } = this.state;
        event.preventDefault();

        dispatch(addItem(data, (id) => console.log(id)));
      }
_onSubmit(event) {
 const { dispatch } = this.props;
 const { data } = this.state;
 event.preventDefault();

 dispatch(addItemActionCreator(data));
}
现在,我的后端将创建一个id为的任务,我可以跟踪进度。通常这个给定的任务需要一段时间才能完成,所以我想显示通知栏

为了跟踪该任务,我需要检索正在进行的给定任务的任务id。所以我考虑添加一个回调函数,这样我就可以从调度器中获得这些信息,比如:

_onSubmit(event) {
    const { dispatch } = this.props;
    const { data } = this.state;
    event.preventDefault();

    dispatch(addItem(data));
  }
_onSubmit(event) {
        const { dispatch } = this.props;
        const { data } = this.state;
        event.preventDefault();

        dispatch(addItem(data, (id) => console.log(id)));
      }
_onSubmit(event) {
 const { dispatch } = this.props;
 const { data } = this.state;
 event.preventDefault();

 dispatch(addItemActionCreator(data));
}
但这感觉有点骇客,因为双向数据通信正在进行


问题:什么是redux方法来实现这一点?

对于这个问题,可以有多种方法来实现相同的结果

我想说的是使用中间件,它将使您能够从您的动作创建者启动多个动作

那么你应该这样写:

_onSubmit(event) {
    const { dispatch } = this.props;
    const { data } = this.state;
    event.preventDefault();

    dispatch(addItem(data));
  }
_onSubmit(event) {
        const { dispatch } = this.props;
        const { data } = this.state;
        event.preventDefault();

        dispatch(addItem(data, (id) => console.log(id)));
      }
_onSubmit(event) {
 const { dispatch } = this.props;
 const { data } = this.state;
 event.preventDefault();

 dispatch(addItemActionCreator(data));
}
在你的行动创造者中,使用promiseas thunk也将允许你这样做:

export const addItemActionCreator = (data) => (dispatch) => {
 Promise.get('data').then((data) => {
  dispatch({ type: STORE_DATA_ID, id: data.id })
 })
}
这将调度一个将在您的状态中存储id的操作

在组件中,使用connect订阅id,组件将始终具有最新的id值


希望这能有所帮助。

有几种不同的方法可以实现这一点。我在使用中也做过类似的事情

您也可以使用或用于相同的目的:创建订阅API信号的可观察对象,并在动作发生时进行调度


我不是redux thunk的粉丝。也许有一种方法可以使用redux thunk来实现这一点,但我确信这并不容易/优雅。

谢谢你的回答,我已经在使用thunk了。不幸的是,我相信你的回答并不能解决我的问题。可以运行多个任务,如何从ID数组中知道哪个任务属于我?我的对象数据中没有任何保证唯一的内容。为什么不在数据对象中添加一些唯一的内容?因此,为了让您跟踪不同的ID,您将拥有持续的操作类型,这些操作类型仅更新您状态的一部分,这就是您了解特定id的方式。您必须调度不同的操作,以在您状态的不同部分存储不同的id,否则它们将重叠,您的constantaction类型将让您控制要更新的状态部分,然后您可以订阅该状态部分,我希望这会有所帮助。@elmeister我开始倾向于该解决方案。对于编辑和删除,我有对象id,所以没有问题。所以我想我必须为添加场景设置一个临时id,可能是当前时间(毫秒)。但这感觉要比只使用id回调复杂得多:对我来说也是-我会使用id回调:所以当你的端点收到带有任务id的posts请求时,它会立即发送响应?是的!或者几乎是立即的,所以这个过程是这样的:1。fething_task_Id 2。taskId_已成功获取_//正在加载,任务正在后台某处运行3。任务\u已完成//数据//渲染数据