React native 如何从不同的减速器更新状态?
如何更新配置文件?我正在创建用户可以更改其个人资料的位置React native 如何从不同的减速器更新状态?,react-native,react-redux,React Native,React Redux,如何更新配置文件?我正在创建用户可以更改其个人资料的位置 Object { "profile": Object { "name": Object {}, "address": Object {}, "settings": Object { "editName": Object {}, "editAddress": Object {}, } } Reducer.js. import {combineReducers} fr
Object {
"profile": Object {
"name": Object {},
"address": Object {},
"settings": Object {
"editName": Object {},
"editAddress": Object {},
}
}
Reducer.js.
import {combineReducers} from 'redux';
import {ProfileReducer as profile} from '../routes/Profile/modules/Profile';
import {SettingsReducer as settings} from '../routes/Settings/modules/Settings';
export const makeRootReducer = () => {
return combineReducers({
profile,
settings
});
}
export default makeRootReducer;
这是我在settings reducer中的代码。当我运行应用程序时,会在设置对象内创建一个新对象。“设置”和“轮廓缩减器”位于不同的文件夹中。我没有把全部密码都写进去
设置还原程序js
export function saveEdit(type){
return (dispatch,getState) => {
var storeData = '';
var editType = '';
var allState = getState();
var profile = getState().profile;
if(type == 'Name'){
storeData = allState.settings.editName;
editType = 'name';
}
else if(type == 'Address'){
storeData = allState.settings.editAddress;
editType = 'address';
}
dispatch({
type: SAVE_EDIT,
...profile,
[editType]: storeData
})
}
}
function handleSaveEdit(state,action){
return update(state,{
profile: {
$set: action.profile
}
});
}
const ACTION_HANDLERS = {
SET_NAME: handleSetName,
SET_ADDRESS: handleSetAddress,
SAVE_EDIT: handleSaveEdit,
};
const initialState = {
editName: {},
editAddress: {},
};
export function SettingsReducer(state = initialState,action){
const handler = ACTION_HANDLERS[action.type];
return handler? handler(state,action) : state;
}
我预计,如果用户点击保存按钮,来自设置对象的数据将更改来自配置文件对象的数据 因为您已经组合了减速器,所以所有操作都会传递给所有减速器。因此,您可以调度一个操作,并因此更新多个还原程序 假设您希望在调度类型为
'SAVE\u EDIT'
的操作时更新配置文件的状态,您可以让profileReducer响应该类型的操作
让我们假设profileReducer看起来有点像这样:
const INITIAL_STATE = {}
const profileReducer = (state = INITIAL_STATE, action) => {
switch (action.type) {
case 'PROFILE_RESET':
return INITIAL_STATE
... // other cases
default:
return state
}
}
export default profileReducer
然后,您可以简单地为'SAVE\u EDIT'
添加一个案例,并在调度该类型的操作时执行该案例
case 'SAVE_EDIT': {
const newState = ... // Generate newState using state and action
return newState
}
您需要更新的配置文件对象在哪里?它是在profileReducer、组件状态还是数据库中?它在profileReducer中