mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-14 08:42:08 +10:00
fix: Reducer called twice due to use set on shallow copy of the state
- Using set on the shallow copy of the state object caused reducer called twice; reducer function should be pure; use deep copy of the state instead of shallow copy
This commit is contained in:
@ -92,31 +92,32 @@ const initialState = {
|
|||||||
|
|
||||||
const reducer = (state, { type, payload }) => {
|
const reducer = (state, { type, payload }) => {
|
||||||
let items;
|
let items;
|
||||||
|
const newState = JSON.parse(JSON.stringify(state));
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'migrate_section':
|
case 'migrate_section':
|
||||||
return set({ ...state }, `data.${payload.key}`, payload.value);
|
return set({ ...newState }, `data.${payload.key}`, payload.value);
|
||||||
case 'add_item':
|
case 'add_item':
|
||||||
items = get({ ...state }, `data.${payload.key}.items`, []);
|
items = get({ ...newState }, `data.${payload.key}.items`, []);
|
||||||
items.push(payload.value);
|
items.push(payload.value);
|
||||||
return set({ ...state }, `data.${payload.key}.items`, items);
|
return set({ ...newState }, `data.${payload.key}.items`, items);
|
||||||
case 'delete_item':
|
case 'delete_item':
|
||||||
items = get({ ...state }, `data.${payload.key}.items`, []);
|
items = get({ ...newState }, `data.${payload.key}.items`, []);
|
||||||
remove(items, x => x === payload.value);
|
remove(items, x => x === payload.value);
|
||||||
return set({ ...state }, `data.${payload.key}.items`, items);
|
return set({ ...newState }, `data.${payload.key}.items`, items);
|
||||||
case 'move_item_up':
|
case 'move_item_up':
|
||||||
items = get({ ...state }, `data.${payload.key}.items`, []);
|
items = get({ ...newState }, `data.${payload.key}.items`, []);
|
||||||
move(items, payload.value, -1);
|
move(items, payload.value, -1);
|
||||||
return set({ ...state }, `data.${payload.key}.items`, items);
|
return set({ ...newState }, `data.${payload.key}.items`, items);
|
||||||
case 'move_item_down':
|
case 'move_item_down':
|
||||||
items = get({ ...state }, `data.${payload.key}.items`, []);
|
items = get({ ...newState }, `data.${payload.key}.items`, []);
|
||||||
move(items, payload.value, 1);
|
move(items, payload.value, 1);
|
||||||
return set({ ...state }, `data.${payload.key}.items`, items);
|
return set({ ...newState }, `data.${payload.key}.items`, items);
|
||||||
case 'on_input':
|
case 'on_input':
|
||||||
return set({ ...state }, payload.key, payload.value);
|
return set({ ...newState }, payload.key, payload.value);
|
||||||
case 'save_data':
|
case 'save_data':
|
||||||
localStorage.setItem('state', JSON.stringify(state));
|
localStorage.setItem('state', JSON.stringify(newState));
|
||||||
return state;
|
return newState;
|
||||||
case 'import_data':
|
case 'import_data':
|
||||||
if (payload === null) return initialState;
|
if (payload === null) return initialState;
|
||||||
|
|
||||||
@ -127,18 +128,18 @@ const reducer = (state, { type, payload }) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...state,
|
...newState,
|
||||||
...payload,
|
...payload,
|
||||||
};
|
};
|
||||||
case 'load_demo_data':
|
case 'load_demo_data':
|
||||||
return {
|
return {
|
||||||
...state,
|
...newState,
|
||||||
...demoData,
|
...demoData,
|
||||||
};
|
};
|
||||||
case 'reset':
|
case 'reset':
|
||||||
return initialState;
|
return initialState;
|
||||||
default:
|
default:
|
||||||
return state;
|
return newState;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user