react使用動態加載組件


我還是一個react的初學者,一直寫vue,在學的過程中突然想起react能不能動態加載,結果好像都要自己實現,vue的路由可以用()=>import(url),

react 好像沒有,然后在網上看了些大佬的資料,結合之后自己項目里面實現的思路,如有什么錯誤,請評論區指正哈,我好改進

1.實際的組件A

import React, { Component } from 'react';
console.log("test require")
class Testasnyc extends Component{
    
    render(){
        

        return (
            <div>
                測試異步
            </div>
        )
    }
}
module.exports=Testasnyc

2.父組件引用的組件B

import React, { Component } from 'react';
console.log("test import ")
class Testasnyc extends Component {
    render() {
      const Game1 = require('./index')//引入
        return (
          <Game1/>
        )
    }
};
export { Testasnyc }

 

實際組件是用一個B組件包裹起來,路由引入的是B組件,而不是A組件,用的require引入

require/exports 是運行時動態加載,import/export 是靜態編譯

所以運行的時候可以看到 項目初始化就可以看到test import的輸出 而test require 是等頁面打開才輸出

用require如果報錯可能是以下原因,下面是我個人踩的坑,給后來人借鑒以下

require和es6的import混合使用會報錯` TypeError: Cannot assign to read only property 'exports' of object '#<Object>'.. `因此需要使用插件`babel/plugin-transform-modules-commonjs`解決問題   
   npm install --save-dev @babel/plugin-transform-modules-commonjs
添加插件后有兩種處理方式
 在項目根目錄新增.babelrc文件,並在文件中加入
 {
            "plugins": ["@babel/plugin-transform-modules-commonjs"]
      } 

 

第一種如果以下錯誤,就需要使用第二種加入方式,因為package里面已集成Babel的配置
./src/index.js
Error: Multiple configuration files found. Please remove one:
 - package.json
 - D:\project\private\react_project\studyreact-demo\.babelrc
from D:\project\private\react_project\studyreact-demo
    at Array.reduce (<anonymous>)
    at loadOneConfig.next (<anonymous>)
    at findRelativeConfig.next (<anonymous>)
    at buildRootChain.next (<anonymous>)
    at loadPrivatePartialConfig.next (<anonymous>)

 - 在文件的package.json里面添加  

 "babel": {
        "plugins": [
        [
            "@babel/plugin-proposal-decorators",
            {
            "legacy": true
            }
        ],
        "@babel/plugin-transform-modules-commonjs"
        ],
        "presets": [
        "react-app"
        ]
  },

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM