上篇文章已經把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
功能基本實現,可能對整個流程並不清楚怎麼實現的,下面來梳理下整個工做流程
最後來張圖結尾