React
是 DOM 渲染的一個抽象層(view層
),React 不只能經過 ReactDOM 和Web頁面打交道,還能用在服務器端SSR,移動端ReactNative和桌面端Electron。javascript
React-dom
使用import React from 'react'; import ReactDOM from 'react-dom'; const App = () => ( <div> <h1>Hello React</h1> </div> ) ReactDom.render(<App/>, document.getElementById('root'));
react-native
使用import React from 'react'; import {Text, View} from 'react-native'; const WelcomeScreen = () => ( <View> <Text>Hello ReactNative</Text> </View> );
主要用來解決組件之間的通訊和邏輯處理。是 Web 應用是一個狀態機,用來確保視圖與狀態是一一對應的(即一個 State 對應一個 View
),用戶發出 Action,Reducer 函數算出新的 State,View 從新渲染。java
Store
是由redux的createStore函數生成。全部的狀態,保存在對象Store
裏面,整個應用只有惟一一個Store
。react
import { createStore} from 'redux' const store = createStore()
State
是Redux對 Store
生成快照。web
const state = store.getState()
用戶經過View層的交互操做發出Action從而致使State
變化。redux
const ADD_TODO = 'ADD_TODO' function addTodo(text) { return { type: ADD_TODO, text } } const action = addTodo('Learn Redux')
import { createStore } from 'redux' const store = createStore(fn) store.dispatch({ type: 'ADD_TODO', payload: 'Learn Redux' })
用戶發出 Action 後,reducer
會對新產生的 State
的進行一個計算。store.dispatch
方法會觸發 Reducer 的自動執行,所以須要在生成 Store
的時候,將 Reducer 傳入createStore
方法。react-native
const store = createStore(reducer)
Redux 提供的combineReducers
方法,能夠將各個子 Reducer 函數合成一個大的 Reducer。服務器
import { combineReducers } from 'redux'; const totalReducer = combineReducers({ fuc1, fuc2, fuc3 }) export default totalReducer
綜上,redux工做原理以下:react-router
Action 發出之後,Reducer 當即算出 State,是同步;過一段時間再執行 Reducer,是異步。中間件能使 Reducer 在異步操做結束後自動執行。中間件本質是一個函數,是在action發出和reducer計算以前觸發的功能回調。app
將中間件傳入applyMiddleware函數,將applyMiddleware傳入createStore函數,就完成了store.dispatch()的功能加強。dom
import thunk from 'redux-thunk' const store = createStore(reducer, applyMiddleware(thunk))
react-redux是 redux一個封裝庫,react-redux將組件分爲容器組件和UI組件。UI組件負責純粹的視圖渲染,容器組件包含數據處理等邏輯操做。
import { connect } from 'react-redux' const mapStateToProps = state => ({ Data1: state.Data1, Data2: state.Data2 }); const mapDispatchToProps = dispatch => ({ dispatch, actions: bindActionCreators( { fetchGetData1, fetchGetData2 }, dispatch ) }); const VisibleTodoList = connect( mapStateToProps, mapDispatchToProps )(App)
mapStateToProps
負責向UI組件傳入組件邏輯,將UI組件的state映射到propsmapDispatchToProps
負責將用戶的交互操做映射爲action
connect
方法生成容器組件之後,須要讓容器組件拿到state
對象,才能生成 UI 組件的參數,Provider
組件可讓容器組件拿到state
。
<Provider store={store}> <Capp /> </Provider>
上邊提供的demo代表Provider
在根組件外面包了一層,使App
的全部子組件均可以拿到state
react-router-dom
和react-router
兩者可選其一,其中react-router-dom
比react-router
多出 <Link>
<BrowserRouter>
這樣的 DOM 類組件。
<Router> <Route path='/gep/view/auth/404' component={} /> </Router>