rootReducer.js
import { combineReducers } from "redux";
import counterReducer from "./counter.reducer";
const rootReducer = combineReducers({
counter: counterReducer
})
export default rootReducer
counterReducer.js
import { DECREMENT_COUNTER, INCREMENT_COUNTER } from "../Constants";
import initialState from "../initialState";
const counterReducer = (state = initialState, action) => {
switch (action.type) {
case INCREMENT_COUNTER: {
return {
...state,
counter: state.counter + 1
}
}
case DECREMENT_COUNTER:
return {
...state,
counter: state.counter - 1
}
default:
return state
}
}
export default counterReducer
App.js
import React from 'react';
import './App.css';
import { useDispatch, useSelector } from 'react-redux';
import { decrementCounter, incrementCounter } from './actions/counter.action';
function App() {
const selector = useSelector(state => state)
console.log(selector)
const dispatch = useDispatch()
return (
<div>
<h1>Counter: {selector.counter}</h1>
<button onClick={() => dispatch(incrementCounter())}>Increment</button>
<button onClick={() => dispatch(decrementCounter())}>Decrement</button>
</div>
);
}
export default App;
Index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { Provider } from 'react-redux';
import store from './store';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<Provider store={store}>
<App />
</Provider>
);
reportWebVitals();
Store.js
import { configureStore } from "@reduxjs/toolkit";
import initialState from "./initialState";
import rootReducer from "./reducers/root.reducer";
const store = configureStore({
reducer: rootReducer,
preloadedState: initialState
})
export default store
InitialState.js
export const initialState = {
counter: 0
}
因此,我试图实现计数器与增量和减量按钮,但当我点击增量或减量按钮时,它会出现错误,
对象作为React子级无效(找到:具有键的对象 {counter}).
我试过控制台记录状态,发现最初我的状态看起来像
counter: 0
但当我点击递增或递减按钮时,状态变为
counter: {
counter: NaN
}
我搞不懂为什么会发生这种事.