在一个文件中编写 reducer 和 action 是一种常见的做法,尤其是在小型项目或者组件级状态管理中。这种做法有其优势和劣势,下面我将详细解释这些概念以及相关的最佳实践。
Reducer: 是 Redux 中的一个纯函数,它接收当前的状态和一个 action 对象,然后返回一个新的状态。
Action: 是一个简单的 JavaScript 对象,它描述了发生了什么事情。它必须有一个 type
字段,其他字段可以根据需要添加。
combineReducers
)组合它们。问题: 文件过大,难以维护。
解决方法:
combineReducers
来组合多个 reducer。示例代码:
假设我们有一个简单的计数器应用,我们可以这样组织代码:
// counter.js
const initialState = { count: 0 };
function counterReducer(state = initialState, action) {
switch (action.type) {
case 'INCREMENT':
return { ...state, count: state.count + 1 };
case 'DECREMENT':
return { ...state, count: state.count - 1 };
default:
return state;
}
}
export const increment = () => ({ type: 'INCREMENT' });
export const decrement = () => ({ type: 'DECREMENT' });
export default counterReducer;
然后在主 store 文件中组合这个 reducer:
// store.js
import { createStore, combineReducers } from 'redux';
import counterReducer from './counter';
const rootReducer = combineReducers({
counter: counterReducer,
});
const store = createStore(rootReducer);
export default store;
这种方式既保持了代码的简洁性,又提高了可维护性和扩展性。
总的来说,是否在一个文件中编写 reducer 和 action 取决于项目的规模和复杂度。对于小型项目或组件级状态管理,这种做法是可行的;而对于大型项目,建议采用模块化的方式来组织代码。
领取专属 10元无门槛券
手把手带您无忧上云