欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于webpack4搭建的react項目框架的方法

 更新時間:2018年06月30日 11:43:25   作者:一二三  
本篇文章主要介紹了基于webpack4搭建的react項目框架的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

介紹

框架介紹,使用webpac構(gòu)建的react單頁面應用,集成antd。使用webpack-dev-server啟動本地服務,加入熱更新便于開發(fā)調(diào)試。使用bundle-loader進行代碼切割懶加載

手動搭建,不使用cli,大量注釋適合初學者對webpack的理解學習,對react項目的深入了解

啟動

 git clone https://gitee.com/wjj0720/react-demo.git
 cd react-demo
 yarn
 yarn start

打包

yarn build

目錄結(jié)構(gòu)

 +node_modules
 -src
  +asset
  +Layout
  +pages
  +redux
  +utils
  +app.js
  +index.html
  +index.js
 .babelrc 
 package.json 
 postcss.config.js
 webpack.config.js //webpack 配置

bundle-loader 懶加載使用

 // webpack.config.js 配置
 module: {
  rules: [
   {
    test: /\.bundle\.js$/,
    use: {
     loader: 'bundle-loader',
     options: {
      name: '[name]',
      lazy: true
     }
    }
   }
  ]
 }
 // 頁面引入組件
 import Home from "bundle-loader?lazy&name=[name]!./Home";

 // 組件使用 因為組件懶加載 是通過異步的形式引入 所以不能再頁面直接以標簽的形式使用 需要做使用封裝 
 import React, {Component} from 'react'
 import { withRouter } from 'react-router-dom'
 class LazyLoad extends Component {
  state = {
   LoadOver: null
  }
  componentWillMount() {
   this.props.Loading(c => {
    this.setState({
     LoadOver: withRouter(c.default)
    })
   })
  }
 
  render() {
   let {LoadOver} = this.state;
   return (
    LoadOver ? <LoadOver/> : <div>加載動畫</div>
   )
  }
 }
 export default LazyLoad

 // 通過封裝的懶加載組件過度 增加加載動畫
 <LazyLoad Loading={Home} />

路由配置

框架按照模塊劃分,pages文件夾下具有route.js 即為一個模塊

 // 通過require.context讀取模塊下路由文件
 const files = require.context('./pages', true, /route\.js$/)
 let routers = files.keys().reduce((routers, route) => {
  let router = files(route).default
  return routers.concat(router)
 }, [])

 // 模塊路由文件格式
 import User from "bundle-loader?lazy&name=[name]!./User";
 export default [
  {
   path: '/user',
   component: User
  },
  {
   path: '/user/:id',
   component: User
  }
 ]

redux 使用介紹

 // ---------創(chuàng)建 --------
 // 為了不免action、reducer 在不同文件 來回切換 對象的形式創(chuàng)建

 // createReducer 將書寫格式創(chuàng)建成rudex認識的reducer
 export function createReducer({state: initState, reducer}) {
  return (state = initState, action) => {
   return reducer.hasOwnProperty(action.type) ? reducer[action.type](state, action) : state
  }
 }

 // 創(chuàng)建頁面級別的store
 const User_Info_fetch_Memo = 'User_Info_fetch_Memo'
 const store = {
  // 初始化數(shù)據(jù)
  state: {
   memo: 9,
   test: 0
  },
  action: {
   async fetchMemo (params) {
    return {
     type: User_Info_fetch_Memo,
     callAPI: {url: 'http://stage-mapi.yimifudao.com/statistics/cc/kpi', params, config: {}},
     payload: params
    }
   },
   ...
  },
  reducer: {
   [User_Info_fetch_Memo] (prevState = {}, {payload}) {
    console.log('reducer--->',payload)
    return {
     ...prevState,
     memo: payload.memo
    }
   },
   ...
  }
 }

 export default createReducer(store)
 export const action = store.action

 // 最終在模塊界別組合 [當然模塊也有公共的數(shù)據(jù)(見Home模塊下的demo寫法)]
 import {combineReducers} from 'redux'
 import info from './Info/store'
 export default combineReducers({
  info,
  。。。
 })

 // 最終rudex文件夾下的store.js 會去取所有模塊下的store.js 組成一個大的store也就是我們最終倉庫

 // --------使用------
 // 首先在app.js中將store和app關聯(lián)
 import { createStore } from 'redux'
 import { Provider } from 'react-redux'
 // reducer即我們最終
 import reducer from './redux/store.js'
 // 用戶異步action的中間件
 import middleware from './utils/middleware.js'
 let store = createStore(reducer, middleware)
 <Provider store={store}>
  。。。
 </Provider>


 // 然后組件調(diào)用 只需要在組件導出時候 使用connent鏈接即可
 import React, {Component} from 'react'
 import {connect} from 'react-redux'
 // 從頁面級別的store中導出action
 import {action} from './store'

 class Demo extends Component {
  const handle = () => {
   // 觸發(fā)action
   this.props.dispatch(action.fetchMemo({}))
  }
  render () {
   console.log(this.props.test)
   return <div onClick={this.handle}>ss</div>
  }
 }
 export default connect(state => ({
  test: state.user.memo.test
 }) )(demo) 

關于redux中間件

 // 與其說redux中間件不如說action中間件
 // 中間件執(zhí)行時機 即每個action觸發(fā)之前執(zhí)行

 // 
 import { applyMiddleware } from 'redux'
 import fetchProxy from './fetchProxy';

 // 中間件 是三個嵌套的函數(shù) 第一個入?yún)檎麄€store 第二個為store.dispatch 第三個為本次觸發(fā)的action 
 // 簡單封裝的中間件 沒有對請求失敗做過多處理 目的在與項錯誤處理機制給到頁面處理
 const middleware = ({getState}) => next => async action => {
  // 此時的aciton還沒有被執(zhí)行 
  const {type, callAPI, payload} = await action
  // 沒有異步請求直接返回action
  if (!callAPI) return next({type, payload})
  // 請求數(shù)據(jù)
  const res = await fetchProxy(callAPI)
  // 請求數(shù)據(jù)失敗 提示
  if (res.status !== 200) return console.log('網(wǎng)絡錯誤!')
  // 請求成功 返回data
  return next({type, payload: res.data})
 }
 export default applyMiddleware(middleware)

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • jenkins分環(huán)境部署vue/react項目的方法步驟

    jenkins分環(huán)境部署vue/react項目的方法步驟

    這篇文章主要介紹了jenkins分環(huán)境部署vue/react項目的方法,本文分步驟給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 淺談python的函數(shù)知識

    淺談python的函數(shù)知識

    這篇文章主要為大家介紹了python的函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • 在create-react-app中使用css modules的示例代碼

    在create-react-app中使用css modules的示例代碼

    這篇文章主要介紹了在create-react-app中使用css modules的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 詳解create-react-app 2.0版本如何啟用裝飾器語法

    詳解create-react-app 2.0版本如何啟用裝飾器語法

    這篇文章主要介紹了詳解create-react-app 2.0版本如何啟用裝飾器語法,cra2.0時代如何啟用裝飾器語法呢? 我們依舊采用的是react-app-rewired, 通過劫持webpack cofig對象, 達到修改的目的
    2018-10-10
  • React利用scheduler思想實現(xiàn)任務的打斷與恢復

    React利用scheduler思想實現(xiàn)任務的打斷與恢復

    這篇文章主要為大家詳細介紹了React如何利用scheduler思想實現(xiàn)任務的打斷與恢復,文中的示例代碼講解詳細,感興趣的小伙伴可以參考一下
    2024-03-03
  • react?定位組件源碼解析

    react?定位組件源碼解析

    這篇文章主要為大家介紹了react定位組件源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • React中state屬性案例詳解

    React中state屬性案例詳解

    在React中,state 是一個用于存儲組件內(nèi)部數(shù)據(jù)的特殊對象,每個React組件都可以包含自己的state,我們往往是通過修改state的值來驅(qū)動React重新渲染組件,這篇文章主要介紹了React中state屬性,需要的朋友可以參考下
    2023-11-11
  • React Native react-navigation 導航使用詳解

    React Native react-navigation 導航使用詳解

    本篇文章主要介紹了React Native react-navigation 導航使用詳解,詳解的介紹了react-navigation導航的使用,具有一定的參考價值,有興趣的可以了解一下
    2017-12-12
  • React基礎-JSX的本質(zhì)-虛擬DOM的創(chuàng)建過程實例分析

    React基礎-JSX的本質(zhì)-虛擬DOM的創(chuàng)建過程實例分析

    這篇文章主要介紹了React基礎-JSX的本質(zhì)-虛擬DOM的創(chuàng)建過程,結(jié)合具體實例形式分析了虛擬dom的基本原理與實現(xiàn)方法,需要的朋友可以參考下
    2023-05-05
  • React?Redux管理庫示例詳解

    React?Redux管理庫示例詳解

    這篇文章主要介紹了如何在React中直接使用Redux,目前redux在react中使用是最多的,所以我們需要將之前編寫的redux代碼,融入到react當中去,本文給大家詳細講解,需要的朋友可以參考下
    2022-12-12

最新評論