react redux 原始碼學習

2021-09-16 12:55:58 字數 1735 閱讀 8436

function createstate(reducer) 

dispatch({});

// 然後將 我們要用到的 getstate, dispatch, subscribe 給暴露出去

return

}

// 這裡是使用了 react 的 上下文內容,不贅述; 

export class provide extends component

static childcontexttypes =

getchildcontext()

} render()

)}}

// 在這裡可以看到

// connect()(component) 這個函式的執行過程

// 首先返回乙個 函式,那個函式也是高階函式 ,然後 用這個返回的 高階函式 將 子元件給包起來

// 這個 元件 就是真正將 自己使用元件包起來的

class connect extends component

constructor() }

}componentwillmount = () => = this.context;

this._updateprops();

// 正如上文所說,這裡 就是 呼叫了 subscribe,當資料改變了之後,

// 將改變的事件分發 到這裡,然後 執行 this._updateprops()

// 這樣就做到了 響應

store.subscribe(() => this._updateprops());

}_updateprops() = this.context

let stateprops = mapstatetoprops

? mapstatetoprops(store.getstate(), this.props)

: {} // 防止 mapstatetoprops 沒有傳入

let dispatchprops = mapdispatchtoprops

? mapdispatchtoprops(store.dispatch, this.props)

: {} // 防止 mapdispatchtoprops 沒有傳入

// 這裡實際上 就是 將 所有的 需要獲得的 state 給傳進來

this.setstate(})}

render() = this.context;

// let stateprops = mapstatetoprops(store.getstate());

// 然後將所有的 資料都傳到這裡

// 在這種情況下,props 也就是 redux 的store 裡的資料改變了,就會

// 觸發 資料的 重新渲染

} return connect;

}

首先 將資料收集起來,這是正常的 state

使用 connect 的過程中,將 所有的資料都 通過高階元件的方式 注入到 子元件中

在 connect 的過程中,會使用 redux 的事件派發機制,使用 subscribe 將 高階元件的 store 給繫結住

所以 當 dispatch 改變資料的時候,會觸發 subscribe ,從而 觸發 高階元件 store 的改變

這樣 store 改變了,就會 使子元件,也就是使用 資料的元件的 props 改變

這樣監聽到 props 改變了,就會觸發 渲染 

React Redux 原始碼解析

一般而言,我檢視乙個庫的源 首先回檢視對應方法的引數,其次是對應的return,然後再看 的具體實現。通過檢視原始碼,發現createstore方法返回了乙個物件,該物件共暴露出了五個方法,四個常用的方法 return 複製 複製 檢視原始碼的開始部分,我們發現createstore可以傳入兩個三個...

原始碼解讀 react redux

toc 其中高階元件如果你不太了解也無所謂,你只需要知道,高階元件就是乙個工廠函式,它接收乙個元件類 或者函式元件 返回乙個被修改後的新的元件類。connect就是乙個高階元件。文章內會使用的簡寫 我們知道,react redux 為開發者提供了 redux 到 react 的 binding。本文...

react redux原始碼解析

react redux原始碼 1.provider 把基於屬性傳遞進來的store掛載到上下文上 2.connect provider建立乙個元件 並把store掛載到上下文中供後代使用 connect 第乙個執行返回是乙個函式 第二個執行返回是乙個元件 元件 proxy 渲染proxy目的是把傳進...