https://codesandbox.io/s/jvj6o043yvリアクト - Reduxのカウンターを例アクション倍
を発射Iは、接続プロバイダを反応させ、Reduxのの基礎を完全に理解しようとしている、とmapStateToPropsとMapDispatchToPropsは非常に簡単なカウンターの例を使用しています。エクササイズのポイントは、小道具とアクションをカウンターコンポーネントに注入することです。
私が見ている問題は、ボタンのクリックごとに自分のアクションが2回発砲していることです。私はReduxのnoobですので、私はそれがかなり基本的なエラーです(私は願って)確信しています。私はどこに間違っていたのかを知ることができます。前もって感謝します。
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { connect } from 'react-redux'
import { createStore, applyMiddleware } from 'redux';
import { createLogger } from 'redux-logger';
// Reducer
const counter = (state = 0, action) => {
switch (action.type) {
case 'INCREMENT':
return state + 1;
case 'DECREMENT':
return state - 1;
default:
return state;
}
}
// store setup
const configureStore =() => {
const middlewares = [];
if (process.env.NODE_ENV !== 'production') {
middlewares.push(createLogger());
}
return createStore(
counter,
applyMiddleware(...middlewares)
);
};
const store = configureStore();
// functional component
let Counter = ({
currCounter,
onIncrement,
onDecrement
}) => (
<div>
<h1>{currCounter}</h1>
<button onClick={onIncrement}>+</button>
<button onClick={onDecrement}>-</button>
</div>
);
// Connect logic
const mapStateToProps = (state) => ({
currCounter: state
})
const mapDispatchToProps = {
onIncrement:() =>
store.dispatch({
type: 'INCREMENT'
}),
onDecrement:() =>
store.dispatch({
type: 'DECREMENT'
}),
}
Counter = connect(
mapStateToProps,
mapDispatchToProps
)(Counter)
// Entry point
const render =() => {
ReactDOM.render(
<Provider store={store}>
<Counter />
</Provider>,
document.getElementById('root')
);
};
store.subscribe(render);
render();
ありがとうございます!非常に明快で親切で助けになる。 – shaz