从Redux

时间:2017-10-11 13:44:02

标签: reactjs redux

我正在将我的项目从 flux 转换为 redux

根组件是非常直接的redux:

import React from "react";
import ReactDOM from "react-dom";

import { Provider } from 'react-redux'
import AppReducer from './AppReducer'
import { createStore } from 'redux'

const store = createStore(AppReducer)

ReactDOM.render(
  <Provider store={store}>
    //rest of application goes here
  </Provider>,
app);

使用 mapToProps mapToDispatch 我可以很好地处理组件级别的行为。

现在我要来服务器响应,即异步调用。

在我的通道实现中,我有一个文件呼叫&#39;服务器&#39;我有我的AJAX调用并返回一个promise,然后调用 AppDispatcher.dispatch

function handleResponse(endpoint) {
  return function (err, res) {
    if (res && res.ok) {
      receiveData(endpoint, res);
    }
  };
}

function receiveData(endpoint, responseData) {
  AppDispatcher.dispatch(
    {
      type: ActionTypes.SERVER_RESPONSE,
      endpoint: endpoint,
      state: "ReponseIsOK",
      payload: responseData.body
    }
  );
  dispatch(endpoint, "CommunicationState.RESPONSE_OK", responseData.body);
}

我应该如何将其转换为 redux

我需要以某种方式联系调度员,我希望这样的事情可行:

function receiveData(endpoint, responseData) {

let store = Provider.getStore();
  store.dispatch(
    {
      type: ActionTypes.SERVER_RESPONSE,
      endpoint: endpoint,
      state: "ReponseIsOK",
      payload: responseData.body
    }
  );
}

我尝试过 provider.store provider.context.store ,但它们似乎也无效。

我真的只需要访问商店以便我可以触发事件,但不知道如何访问它。

2 个答案:

答案 0 :(得分:2)

我非常确定这是使用Redux-Thunk的情况,它允许您异步调度操作。

以下是文档中的解释:

  

Redux Thunk中间件允许您编写返回函数而不是动作的动作创建者。 thunk可用于延迟动作的发送,或仅在满足某个条件时发送。内部函数接收存储方法dispatch和getState作为参数。

我认为您首先需要修改商店的创建并将redux-thunk作为中间件传递,然后您可以将[DataMember(Name = "email_address")] [DisplayName("email_address")] [Required] [EmailAddress] public string EmailAddress { get; set; } 函数修改为:

receiveData

答案 1 :(得分:1)

使用store创建configureStore时,您只需要保存对var store = configureStore() // ... export function getStore() { return store } // ... <Provider store={ store } /> 的引用。如果你想从外面访问它,你可以设置一个getter。

伪代码:

{{1}}