【发布时间】:2020-10-19 05:39:21
【问题描述】:
我正在学习 redux,但我无法让计数器工作。我设置了 action.js、reducer.js 和 store.js,并在 index.js 中创建了一个商店和一个提供者。我还在 App.js 中将 react-redux 用于 useSelector 和 useDispatch 我不知道我在这里缺少什么。
点击 App.js 时,计数器似乎没有增加。我在这里错过了什么?
非常感谢,提前:
//Reducer.js
const counterReducer = (state = 0,action) => {
switch(action.type){
case "INCREMENT":
return state + action.payload
case "DECREMENT":
return state - action.payload
default:
return state
}
}
export default counterReducer
//Action.js
const increment = (steps) => {
return {
type: 'INCREMENT',
payload: steps
}
}
const decrement = (steps) => {
return {
type: 'DECREMENT',
payload: steps
}
}
//store.js
import {createStore} from 'redux'
import counterReducer from './reducer'
const myStore = createStore(counterReducer)
export default myStore
//index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import {Provider} from 'react-redux'
import myStore from './store'
ReactDOM.render(
<React.StrictMode>
<Provider store={myStore}>
<App />
</Provider>
</React.StrictMode>,
document.getElementById('root')
);
serviceWorker.unregister();
//App.js
import React from 'react';
import './App.css';
import {useSelector, useDispatch} from 'react-redux'
import {increment,decrement} from './action'
function App() {
const counter = useSelector(state => state.counterReducer)
const dispatch = useDispatch()
console.log(counter)
return (
<div className="App">
<h1>Counter {counter}</h1>
<button onClick={() => dispatch(increment(2))}>+</button>
<button onClick={() => dispatch(decrement(2))}>-</button>
</div>
);
}
export default App;
【问题讨论】:
-
这里创建store是错误的,必须用thunk连接react和redux
-
如果某些动作创建者是异步的,您应该使用 Thunk。所以对于这个例子,它似乎没有必要。