咱們實現一個最基本的點擊按鈕加減操做javascript
store/index.jsjava
import { createStore } from 'redux';
const countReducer = (state = 0, action) => {
const {type, payload} = action
switch(type) {
case 'ADD':
return state + payload;
case 'MINUS':
return state - payload;
default:
return state
}
}
const store = createStore(
countReducer
)
export default store;
複製代碼
先建立一個storereact
ReduxPage.jsgit
import React, { Component } from 'react'
import store from '../store/'
export default class ReduxPage extends Component {
componentDidMount() {
this.unsubscribe = store.subscribe(() => {
this.forceUpdate()
})
}
componentWillUnmount() {
if(this.unsubscribe) {
this.unsubscribe()
}
}
add = () => {
store.dispatch({type: 'ADD', payload: 1})
}
minus = () => {
store.dispatch({type: 'MINUS', payload: 1})
}
render() {
return(
<div> <h3>Reduxpage</h3> <p>{store.getState()}</p> <button onClick={this.add}>同步+</button> <button onClick={this.minus}>同步-</button> </div>
)
}
}
複製代碼
好,咱們已經實現了redux。就是這麼簡單。上面的有個注意的地方,就是必定要在更新的時候進行監聽,否則沒法更新Dom的內容。github
咱們再回顧一下基本的流程:store裏面有一個counterReducer,它是一個純函數,傳入的是state,返回的是新的state,裏面定義了修改state的規則,而後把這個counterReducer注入到store裏面,咱們就可使用store定義的一些方法幹一些事情了。在ReduxPage.js裏面,咱們用了store.getState()這個方法訪問了state的值。當點擊按鈕的時候,咱們會經過store.dispatch觸發一個ation,counterReducer收到這個action之後。會根據action的type,來執行相應的修改規則,而後對state做出更新,當state更新的時候,store.subscribe()會監聽state的變化,而後經過this.forceUpdate()更新了Dom,這樣,一個完整的redux就實現了它應該實現的功能。redux
下面進入源碼,咱們去看看具體是怎麼實現的異步
咱們須要實現一個createStore類,而後去實現它內部的幾個方法函數
Jredux/createStore.jspost
export default function createStore(reducer) {
let currentState;
let currentlistenrs = [];
function getState() {
return currentState;
}
function dispatch(action) {
currentState = reducer(currentState, action)
currentlistenrs.forEach(listener => listener())
}
function subscribe(listener) {
currentlistenrs.push(listener)
return () => {
const index = currentlistenrs.indexOf(listener)
currentlistenrs.splice(index, 1)
}
}
// 初始化
dispatch({type: 'Jredux'});
return {
getState,
dispatch,
subscribe
}
}
複製代碼
就這麼簡單,一個redux的源碼就寫完了,咱們用上面的這個代碼也能夠實現按鈕加減的操做了。this