combine-action-reducer
Version:
create action creator and reducer with one action-reduer
59 lines (58 loc) • 1.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
/**
* # 创建一个actionCreator from mapObj;
* 设置子路径时, 使用了 '/'分割
*/
function buildActionCreator(mapObj, path) {
if (path === void 0) { path = ""; }
var keys = Object.getOwnPropertyNames(mapObj);
var rus = {};
keys.forEach(function (one) {
if (typeof mapObj[one] === "function") {
var type_1 = path + one;
rus[one] = function (payload) {
return {
type: type_1,
payload: payload,
};
};
}
else {
// 设置子路径, 使用了 '/'分割
rus[one] = buildActionCreator(mapObj[one], path + one + "/");
}
});
return rus;
}
exports.buildActionCreator = buildActionCreator;
/**
* 创建一个Reducer from mapObj;
*/
function buildReducer(mapObj, initState) {
return function (state, action) {
if (state === void 0) { state = initState; }
var pickReducer = mapObj[action.type];
// 通过action.type 选取 reducer;
if (typeof pickReducer === "function") {
return pickReducer(state, action.payload);
}
else {
// 没有匹配到就 返回state.
return state;
}
};
}
exports.buildReducer = buildReducer;
/**
* 同时创建Action Creator 和 Reducer;
*/
function ActionReducer(initState) {
return function ObjectReducer(mapObj) {
return {
reducer: buildReducer(mapObj, initState),
action: buildActionCreator(mapObj),
};
};
}
exports.ActionReducer = ActionReducer;