React + Redux + React-router 全家桶

2021-03-02 SegmentFault

React


React是 DOM 渲染的一個抽象層(view層),React 不僅能通過 ReactDOM 和Web頁面打交道,還能用在伺服器端SSR,移動端ReactNative和桌面端Electron。

web端開發需要搭配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'));

移動端的ReactNative開發需要搭配react-native使用

import React from 'react';
import {Text, View} from 'react-native';

const WelcomeScreen = () => (
  <View>
      <Text>Hello ReactNative</Text>
  </View>
 );

Redux


主要用來解決組件之間的通信和邏輯處理。是 Web 應用是一個狀態機,用來確保視圖與狀態是一一對應的(即一個 State 對應一個 View),用戶發出 Action,Reducer 函數算出新的 State,View 重新渲染。

Store

Store是由redux的createStore函數生成。所有的狀態,保存在對象Store裡面,整個應用只有唯一一個Store。

import { createStore} from 'redux'
const store = createStore()

State


State是Redux對 Store 生成快照。

const state = store.getState()

Action


用戶通過View層的交互操作發出Action從而導致State變化。

創建Action

const ADD_TODO = 'ADD_TODO'

function addTodo(text) {
  return {
    type: ADD_TODO,
    text
  }
}

const action = addTodo('Learn Redux')

發送Action

import { createStore } from 'redux'
const store = createStore(fn)

store.dispatch({
  type: 'ADD_TODO',
  payload: 'Learn Redux'
})

Reducer


用戶發出 Action 後,reducer會對新產生的 State的進行一個計算。store.dispatch方法會觸發 Reducer 的自動執行,因此需要在生成 Store 的時候,將 Reducer 傳入createStore方法。

const store = createStore(reducer)

Redux 提供的combineReducers方法,可以將各個子 Reducer 函數合成一個大的 Reducer。

import { combineReducers } from 'redux';

const totalReducer = combineReducers({
  fuc1,
  fuc2,
  fuc3
})

export default totalReducer

綜上,redux工作原理如下:



Redux中間件


Action 發出以後,Reducer 立即算出 State,是同步;過一段時間再執行 Reducer,是異步。中間件能使 Reducer 在異步操作結束後自動執行。中間件本質是一個函數,是在action發出和reducer計算之前觸發的功能回調。

中間件的使用

將中間件傳入applyMiddleware函數,將applyMiddleware傳入createStore函數,就完成了store.dispatch()的功能增強。

import thunk from 'redux-thunk'
const store = createStore(reducer, applyMiddleware(thunk))

react-redux


react-redux是 redux一個封裝庫,react-redux將組件分為容器組件和UI組件。UI組件負責純粹的視圖渲染,容器組件包含數據處理等邏輯操作。

connect() 函數負責將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映射到props


mapDispatchToProps負責將用戶的交互操作映射為action

Provider組件負責傳入store對象

connect方法生成容器組件以後,需要讓容器組件拿到state對象,才能生成 UI 組件的參數,Provider組件可以讓容器組件拿到state。

<Provider store={store}>
      <Capp />
</Provider>

上邊提供的demo表明Provider在根組件外面包了一層,使App的所有子組件都可以拿到state

react-router-dom


react-router-dom和react-router二者可選其一,其中react-router-dom比react-router多出 <Link> <BrowserRouter> 這樣的 DOM 類組件。

<Router>
    <Route path='/gep/view/auth/404' component={} />        
</Router>

點擊左下角閱讀原文,到 SegmentFault 思否社區 和文章作者展開更多互動和交流。

相關焦點

  • 關於react結合redux使用,或許你還應該掌握這些
    此外,框架本身是有一套屬於自己的解決方案的,但是react身為庫的同時,其本身最大的作用就是用來寫UI組件,自身並沒有具備異步處理機制,模塊化以及表單驗證等,主要充當一個前端渲染的庫而已,只有將React和react-router,react-redux,redux-saga等結合起來使用才稱得上框架。
  • React系列十二:React - Router
    (點擊文章底部左下角閱讀原文來訪問我們官網)前言 這節我們將介紹 React 中 react - router,路由跳轉的配置以及使用本文會向你介紹以下內容:認識 react - router 如果你是第一次接觸 router
  • React-Redux 使用 Hooks
    快速搭建 redux 環境    create-react-app redux-app    yarn  add react-redux reduxTips: 確保 react-redux 版本 在 v7.1.0 以上
  • 【重學React】動手實現一個react-redux
    react-redux 是什麼react-redux 是 redux 官方 React 綁定庫。它幫助我們連接UI層和數據層。本文目的不是介紹 react-redux 的使用,而是要動手實現一個簡易的 react-redux,希望能夠對你有所幫助。
  • 3-6-react-redux
    我們先來觀察一下我們需要用props傳入的3個參數,在之前我們單獨使用react的時候,我們是通過react自身的state來控制狀態數據的,而現在有的redux,我們可以發現,其實我們需要的value就是redux目前返回的state,另外兩個事件函數increment和decrement其實也就對應著同種類型action的執行。也就是說,目前的這3個參數,我們都可以直接從redux當中獲取到。
  • React-redux數據傳遞是如何實現的?
    主要內容React數據傳遞reduxReact-redux其他學習目標第一節 react數據傳遞react 中組件之間數據傳遞1. 父傳子2. 子傳父(狀態提升)3.redux能統一管理數據,只要redux中的數據發生改變了,所有使用redux中數據的地方都會改變。redux有自己的一套操作標準。2. 使用1. 安裝:2. 三大原則1.單一數據源整個應用的 state 被儲存在一棵 object tree 中,並且這個 object tree 只存在於唯一一個 store 中。
  • 手寫React-Router源碼,深入理解其原理
    React-Router應用,感覺跟以前寫過的react-redux的Provider類似,我猜是用來注入context之類的。看起來我們要搞懂react-router-dom的源碼還必須得去看react-router和history的源碼,現在我們手上有好幾個需要搞懂的庫了,為了看懂他們的源碼,我們得先理清楚他們的結構關係。
  • 我一定把 React-Router 的真諦給你整地明明白白的
    React-Router應用,感覺跟以前寫過的react-redux的Provider類似,我猜是用來注入context之類的。看起來我們要搞懂react-router-dom的源碼還必須得去看react-router和history的源碼,現在我們手上有好幾個需要搞懂的庫了,為了看懂他們的源碼,我們得先理清楚他們的結構關係。
  • Redux/react-redux/redux中間件設計實現剖析
    二. react-redux的實現上文我們說到,一個組件如果想從store存取公用狀態,需要進行四步操作:import引入store、getState獲取狀態、dispatch修改狀態、subscribe訂閱更新,代碼相對冗餘,我們想要合併一些重複的操作,而react-redux就提供了一種合併操作的方案:react-redux提供 Provider
  • React SSR 同構入門與原理
    import { StaticRouter } from"react-router-dom";import Routes from"..安裝包:npm i redux react-redux redux-thunk --save複製代碼redux 庫;react-redux 是 react 與 redux 的橋梁;
  • 前端必備:React的生命周期和路由
    在React中,常用的有兩個包可以實現這個需求,那就是react-router和react-router-dom。react-router-native: 基於react-router,類似react-router-dom,加入了react-native運行環境下的一些功能。react-router-dom依賴react-router,所以我們使用npm安裝依賴的時候,只需要安裝相應環境下的庫即可。不用再顯式安裝react-router。
  • React Router 5 完整指南
    安裝 React Router請保證你電腦上安裝了 node 和 npm ,然後利用 create-react-app 來創建一個新的 React 項目,我們直接使用 npx 來進行項目的新建:npx create-react-app react-router-demo複製代碼
  • React介紹與近期面試題分享~
    What are the main features of the react?2. How does virtual Dom update the real Dom?3. Walk me through all the knowledge of jsx u know?4.
  • React.js 2016最佳實踐
    如果你覺得需要Flux或者相似的解決方案,你應該了解一下redux(https://github.com/rackt/redux),並學習Dan Abramov(https://twitter.com/dan_abramov)的redux入門指南(https://egghead.io/series/getting-started-with-redux),來強化你的開發技能。
  • webpack4+react16+react-router-dom4從零配置到優化,實現路由按需...
    上一篇介紹了下webpack的一些配置,接下來講下reactRouter4裡面關於路由的一些配置,如何做到模塊的按需加載,這也是常用的一種優化網站性能的方式
  • React Status 中文周刊 #38 - Redux 4.1 版本發布
    還附有很多最佳實踐,具體內容小夥伴們看文章吧~電腦閱讀,請點擊閱讀原文或直接訪問 https://docschina.org/weekly/react🔥 本周熱門React Table 指南及其最佳實踐 — 社區有很多和 React Table 相關的庫。
  • 現代化 React 路由 Hookrouter 的使用
    對於 React,大多數開發者都使用過 react-router-dom,這是 Reactrouter 庫用於路由的一個變量。然而,隨著 React hooks 的引入,最近一個被稱為 Hookrouter 的新模塊被推出,作為一個基於 hooks 的靈活、快速的路由。
  • Java學習進階之React狀態保存
    1、手動保存狀態手動保存狀態,是比較常見的解決方式,可以配合React組件的componentWillUnmount生命周期,通過redux之類的狀態管理層對數據進行保存,通過componentDidMount周期進行數據恢復。
  • 一名 Vue 程式設計師總結的 React 基礎
    使用姿勢import React from "react";import { connect } from "react-redux";const ReduxDemo: React.FC = (props) => {  const addCount = () => {    const { dispatch
  • 【第770期】react+redux渲染性能優化原理
    ps:文末有福利,歡迎參加~正文從這開始~React基本上成了前端的必備技能,redux更是對react的錦上添花。我在「redux,一種頁面狀態管理的優雅方案」一文中介紹了react與redux結合的基本方法和高級技巧。