我正在将我的项目从 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 ,但它们似乎也无效。
我真的只需要访问商店以便我可以触发事件,但不知道如何访问它。
答案 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}}