state稱爲內部狀態或局部狀態,
props與context則用於在組件間傳遞數據,props僅支持逐層傳遞,而context則可以跨級傳遞,只要在一個組件中定義了context,這個組件裏面的子組件無論跨多少級均可以訪問到context中的數據,react-redux的provider組件就使用了context來傳遞storejavascript
組件是一個函數或類,它決定了如何把數據變爲視圖
ReactElement只是一個普通的對象,它描述了組件實例或DOM節點
組件實例是組件類的實例化對象html
constructor()
執行時間:組件被加載前最早調用,而且僅調用一次
做用:定義狀態機變量
注意:第一個語句必須是super(props)java
componentWillMount()
執行時間:組件初始渲染(render()被調用前)前調用,而且僅調用一次
做用:若是在這個函數中調用setState改變某些狀態機,react會等待setState完成後再渲染 組件
注意:子組件也有componentWillMount函數,在父組件的該函數調用後再被調用react
render()
執行時間:componentWillMount以後,componentDidMount以前,
做用:渲染掛載組件
觸發條件:(1)初始化加載頁面(2)狀態機改變setState ( 3 ) 接收到新的props(父組件更新)
注意:組件所必不可少的核心函數;不能在該函數中修改狀態機stateredux
componentDidMount()
componentWillReceiveProps(nextProps)
shouldComponentUpdate(nextProps, nextState)
componentWillUpdate()
componentDidUpdate()
componentWillUnmount()
執行時間:組件被卸載前調用,
做用:在該方法中執行任何須要的清理,好比無效的定時器,或者清除在 componentDidMount 中建立的 DOM 元素。網絡
action是一個普通對象,表示將要執行的動做,例如{type:'increment'}
reducer描述了action如何把state轉變成下一個state
store是個全局對象,將action和reducer以及stte聯繫在一塊兒
store有如下職能:app
reduxThunk中間件可讓action建立函數先不返回action對象,而是返回一個函數,經過這個函數延遲dispatch或者只在知足指定條件的狀況下dispatchide
import {createStore,applyMiddleware} from 'redux'; import thunk from 'redux-thunk'; const store = createStore(counter,applyMiddleware(thunk));
在全部組件的頂層使用Provider組件給整個程序提供store函數
ReactDOM.render( <Provider store={store}> ... </Peovider>,rootEl);
使用connect()將state和action建立函數綁定到組件中this
export default connect( state=>({counter:state.counter}),//將state.counter傳遞給組件的counter屬性 ActionCreators//是全部action建立函數的集合,同時爲每一個action建立函數隱式綁定了dispatch方法, //所以能夠直接經過props調用這個action建立函數 )(Counter);
展現組件 | 容器組件 | |
---|---|---|
做用 | 描述如何展示(骨架、樣式) | 描述如何運行(數據獲取、狀態更新) |
直接使用 Redux | 否 | 是 |
數據來源 | props | 監聽 Redux state |
數據修改 | 從 props 調用回調函數 | 向 Redux 派發 actions |
調用方式 | 手動 | 一般由 React Redux 生成 |