react-redux-counter
by Allie Yu
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.6/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.6/umd/react-dom.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/redux/4.0.1/redux.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-redux/7.1.0/react-redux.min.js"></script>
<div id="root"></div>
Babel + JSX
const {connect, Provider} = ReactRedux;
const {createStore, applyMiddleware} = Redux;
//actions常量
const INCREMENT='INCREMENT';
const DECREMENT='DECREMENT';
//Action creator
const increment =() => {
return {
type: 'INCREMENT'
}
}
const decrement =() => {
return {
type: 'DECREMENT'
}
}
//reducer
const initialState = {
count: 0
}
const reducer = (state = initialState, action) =>{
// console.log(action)
switch (action.type) {
case 'INCREMENT':
return {
count: state.count + 1
};
case 'DECREMENT':
return {
count: state.count - 1
};
default:
return state;
}
}
/* switch (action.type) {
case INCREMENT:
return Object.assign({},state,{count:state.count+1})
case DECREMENT:
return Object.assign({},state,{count:state.count-1})
*/
//无状态组件Counter.js
class Counter extends React.Component {
constructor(props){
super(props);
}
render() {
return (
<div>
<h2>Counter</h2>
<div>
<button onClick={this.props.onDecrement}>-</button>
<span>{this.props.count}</span>
<button onClick={this.props.onIncrement}>+</button>
</div>
</div>
)
}
}
/* Counter.propTypes = {
count : PropTypes.number.isRequired,
onIncrement: PropTypes.func.isRequired,
onDecrement: PropTypes.func.isRequired
} */
/* const Counter = ({ count, onDecrement, onIncrement }) => (
<div>
<p>Count: {count}</p>
<button onClick={onDecrement}>-</button>
<button onClick={onIncrement}>+</button>
</div>
) */
//容器组件(CounterContainer.js)对无状态组件进行包裹
//container接收action,通过dispatch将action传递给store
//这里调用了react-redux的connect方法,用于将UI组件生成容器组件,其实就是将两者connect连接在一起,connect需要接受两个参数,mapStateToProps和mapDIspatchToProps。
//mapStateToProps方法是讲state转成props传给UI组件,mapDispatchToProps是UI组件参数到store.dispatch的映射,就是接收UI组件传入的action,最后的Counter就是UI组件。
const mapStateToProps = state => {
return {
count: state.count
}
}
const...