手写redux和applyMiddleware中间件react示例
以下是一个简单的示例,展示如何手写一个React中使用Redux和applyMiddleware的例子。
// 手写一个简单的reducer
function counterReducer(state = 0, action) {
switch (action.type) {
case 'INCREMENT':
return state + 1;
case 'DECREMENT':
return state - 1;
default:
return state;
}
}
// 创建一个store,使用applyMiddleware来应用日志中间件
import { createStore, applyMiddleware } from 'redux';
const loggerMiddleware = store => next => action => {
console.group(action.type);
console.info('dispatching', action);
let result = next(action);
console.log('next state', store.getState());
console.groupEnd(action.type);
return result;
};
const store = createStore(
counterReducer,
applyMiddleware(loggerMiddleware)
);
// 使用React展示store中的数据和操作数据的动作
import React from 'react';
import ReactDOM from 'react-dom';
function Counter({ value, onIncrement, onDecrement }) {
return (
<div>
<p>Value: {value}</p>
<button onClick={onIncrement}>Increment</button>
<button onClick={onDecrement}>Decrement</button>
</div>
);
}
function App() {
const [value, setValue] = React.useState(store.getState());
React.useEffect(() => {
return store.subscribe(() => setValue(store.getState()));
}, []);
const dispatch = action => store.dispatch(action);
return (
<Counter
value={value}
onIncrement={() => dispatch({ type: 'INCREMENT' })}
onDecrement={() => dispatch({ type: 'DECREMENT' })}
/>
);
}
ReactDOM.render(<App />, document.getElementById('root'));
在这个例子中,我们创建了一个简单的reducer来处理状态的增加和减少。然后我们创建了一个store,使用自定义的loggerMiddleware来记录每一个action的处理过程。最后,我们使用React来展示store中的数据和操作数据的按钮,并通过dispatch action来更新数据。
评论已关闭