上篇文章已经把redux核心概念讲明白了,这里就不在废话啦,不了解的能够先去回顾下,接下来咱们讲解下在react中如何使用redux,来实现一个简单计数器html
下面咱们讲解下每一个文件的做用,而后在一个一个实现react
读过上篇文章后,对这种目录结构可能还不清楚具体的做用,可是对这些redux中概念确定已经明白,下面咱们一个一个文件开始讲解git
// action-types
export const INCREMENT = "INCREMENT";
export const DECREMENT = "DECREMENT";
复制代码
宏文件不是必须的,可是它好处是结构清晰,一目了然能够看到计数器全部动做的类型github
import * as Types from "../action-types"; //引入动做类型
let initState = { //声明一个初始的状态
number:0
};
function counter(state = initState, action) { //接收state和action两个参数,并给state赋予初始值
switch (action.type) { //判断动做类型
case Types.INCREMENT: //action相似这种结构{type:'INCREMENT',count:5}
return {number:state.number+action.count};
case Types.DECREMENT:
return {number:state.number-action.count};
}
return state
}
export default counter
复制代码
跟咱们上篇文章写的reducer如出一辙,只不过咱们把它抽离出来,让结构清晰redux
import counter from "./counter"; //默认导入reducer
export default counter //默认导出
复制代码
在啰嗦一句,主要是为了之后方便扩展多个reducer,因此才会有reducers/index.js这个主文件bash
import * as Types from "../action-types"; //引入宏
let actions = {
add(num){ //add方法会在组件内部调用,返回action对象
return {type:Types.INCREMENT,count:num}
},
minus(num){
return {type:Types.DECREMENT,count:num}
}
};
export default actions
复制代码
import {createStore} from 'redux';
import reducer from "./reducers"
let store = createStore(reducer); //建立store
export default store;
复制代码
截止到目前为止,store文件已经所有写完。下面咱们开始写组件部分,让仓库中数据给组件使用dom
怪我不能给你们讲明白,咱们仍是看代码逐句解释异步
import React from 'react';
import ReactDOM from 'react-dom';
import Counter from "./components/Counter";
import store from "./store";
//引入react-redux中的Provider组件,用于
import {Provider} from "react-redux";
ReactDOM.render(
<Provider store = {store}>
<div>
<Counter />
</div>
</Provider>, document.getElementById('root'));
复制代码
import React from "react";
import store from "../store";
import * as Types from "../store/action-types"
//生成action的对象的方法叫actionCreator
import actions from "../store/actions/counter";
import {connect} from "react-redux";
class Counter extends React.Component {
render() {
console.log(this.props);
return (
<div>
<div>{this.props.number}</div>
<button onClick={()=>{
this.props.add(5)
}}>+</button>
<button onClick={()=>{
this.props.minus(1)
}}>-</button>
</div>
)
}
}
let mapStateToProps = (state)=>{ //state表明的store.getState()
return {...state}
};
export default connect(mapStateToProps,actions)(Counter)
复制代码
到此为止,咱们基本实现一个计数器功能,先来测试下,而后在梳理下整个工做流程ide
测试点击增长记数功能post
功能基本实现,可能对整个流程并不清楚怎么实现的,下面来梳理下整个工做流程
最后来张图结尾