<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        react+antd做一個后臺管理系統

        來源:懂視網 責編:小采 時間:2020-11-27 19:40:47
        文檔

        react+antd做一個后臺管理系統

        react+antd做一個后臺管理系統:這次給大家帶來react+antd做一個后臺管理系統,react+antd做一個后臺管理系統的注意事項有哪些,下面就是實戰案例,一起來看一下。使用create-react-app腳手架具體基礎配置請參考配合antd組件實現的管理系統demo,線上地址開發前反思1. 按需加載webpa
        推薦度:
        導讀react+antd做一個后臺管理系統:這次給大家帶來react+antd做一個后臺管理系統,react+antd做一個后臺管理系統的注意事項有哪些,下面就是實戰案例,一起來看一下。使用create-react-app腳手架具體基礎配置請參考配合antd組件實現的管理系統demo,線上地址開發前反思1. 按需加載webpa
        這次給大家帶來react+antd做一個后臺管理系統,react+antd做一個后臺管理系統的注意事項有哪些,下面就是實戰案例,一起來看一下。

        使用create-react-app腳手架

        具體基礎配置請參考

        配合antd組件實現的管理系統demo,線上地址

        開發前反思

        1. 按需加載

        webpack的 import 動態加載的模塊的函數,import(參數),參數為模塊地址。

        注意: import 后會返回一個promise對象。

        import('/components/chart').then(mud => {
         dosomething(mod)
        });

        本demo構建了異步加載組件Bundle,具體代碼請見

        class Bundle extends Component {
         constructor(props) {
         super(props);
         this.state = {
         mod: null
         };
         }
         unmount = false
         componentDidMount = () => {
         // 加載組件時,打開全局loading
         this.props.dispatch(loading(true))
         this.load(this.props)
         }
         componentWillUnmount = () => {
         this.unmount = true
         }
         
         componentWillReceiveProps(nextProps) {
         if (nextProps.load !== this.props.load) {
         this.load(nextProps)
         }
         }
         load(props) {
         if (this.state.mod) {
         return true
         }
         //注意這里,使用Promise對象; mod.default導出默認
         props.load().then((mod) => {
         if (this.unmount) {
         // 離開組件時,不異步執行setState
         this.props.dispatch(loading(false))
         return false
         }
         this.setState({
         mod: mod.default ? mod.default : mod
         }, _ => {
         // 組件加載完畢,關閉loading
         this.props.dispatch(loading(false))
         });
         });
         }
         render() {
         return this.state.mod ? this.props.children(this.state.mod) : null;
         }
        }

        具體使用

        <Bundle load={() => import('路徑')}>
         {Comp => {
         return Comp ? <Comp /> : <p>加載中...</p>
         }}
         </Bundle>

        2. 全局loading

        配合redux,dispatch => reducer更新 => mapstate更新,在根組件進行loading的渲染

        詳細請見本demo地址 src/routers/router.js——render函數

        3. 配置路由對象

        項目布局如下

        本demo使用的是router4,官方文檔演示為單行Route(如vue種的router),未有統一配置對象。 管理系統基本圍繞著content進行業務開發,構建通用配置有助于開發 構建router.config.js

        const routers = [
         {
         menuName: '主頁',
         menuIco: 'home',
         component: 'home/home.js', // 主頁
         path: '/admin/home' // 主頁
         },
         {
         menuName: '用戶',
         menuIco: 'user',
         children: [
         {
         menuName: '用戶列表',
         component: 'user/list.js', // 主頁
         path: '/admin/user/list' // 主頁
         }
         ]
         },
         {
         menuName: '多級菜單',
         menuIco: 'setting',
         children: [
         {
         menuName: '多級菜單2',
         children: [
         {
         menuName: '菜單',
         component: 'user/list.js', // 主頁
         path: '/admin/user/list3' // 主頁
         }
         ]
         }
         ]
         },
         {
         menuName: '關于我',
         menuIco: 'smile-o',
         component: 'about/about.js', // 主頁
         path: '/admin/about' // 主頁
         }
        ]

        實現思路,最外層布局為Admin,content被Admin包裹,那么可以利用 this.props.children ,把內容打入content中。(利用bundle組件異步加載后塞入組件進行渲染)

        <Admin>
         <Content { ...this.props } breadcrumb={this.state.breadcrumb}>
         {this.props.children}
         </Content>
        </Admin>
        // Content組件內部
        render() {
         return (
         <p> 
         {this.props.children}
         </p>
         )
        }
        // 本demo實現,詳見src/routers/router.js
        <Route
         path="/admin"
         render={item => (
         <Admin {...item} { ...this.props }>
         {initRouters.map(el => this.deepItem(el, { ...this.props, ...item}))}
         </Admin>
         )}
        />

        4. 配置通用reducer

        多人配合開發,一些業務場景的組件需要狀提升(不理解狀態提升的同學,請科學上網)

        import otherReducers from './otherReducers'
        const App = combineReducers({
         rootReducers,
         ...otherReducers // 其他需要增加的reducers
        })

        5. 登陸驗證

        利用 withRouter 函數,頁面進行路由跳轉時觸發該函數

        const newWithRouter = withRouter(props => {
         // ....
        })

        若未登錄,則返回

        return <Redirect to="/login" />

        6. 路由攔截

        同上,根據路由配置與權限,返回相應的菜單或屏蔽

        return <Redirect to={其他} />

        7 其他配置

        7-1. 自定義樣式

        // 修改webpack.config.dev.js 和 webpack.config-prod.js 配置文件
        {
         test: /\.(css|less)$/,
         // 匹配src的都自動加載css-module
         include: [/src/],
         exclude: [/theme/],
         use: [
         require.resolve('style-loader'), {
         loader: require.resolve('css-loader'),
         options: {
         importLoaders: 1,
         modules: true, // 新增對css modules的支持
         localIdentName: '[path]___[name]__[local]___[hash:base64:5]'
         }
         }, {
         loader: require.resolve('postcss-loader'),
         options: {
         // Necessary for external CSS imports to work
         // https://github.com/facebookincubator/create-react-app/issues/2677
         ident: 'postcss',
         plugins: () => [
         require('postcss-flexbugs-fixes'),
         autoprefixer({
         browsers: [
         '>1%', 'last 4 versions', 'Firefox ESR', 'not ie < 9', // React doesn't support IE8 anyway
         ],
         flexbox: 'no-2009'
         })
         ]
         }
         }, {
         loader: require.resolve('less-loader') // compiles Less to CSS
         }
         ]
        }, {
         // 不匹配node_modules,theme的都不能自動加載css-module
         test: /\.(css|less)$/,
         include: [/node_modules/,/theme/],
         use: [
         {
         loader: "style-loader"
         }, {
         loader: "css-loader",
         options: {
         importLoaders: 1
         }
         }, {
         loader: require.resolve('less-loader') // compiles Less to CSS
         }
         ]
        },

        使用: 在App.js中直接導入

        import './assets/theme/App.less'

        7-2. 熱更新

        步驟一:

        // 安裝react-hot-loader 
        npm install --save-dev react-hot-loader

        步驟二:

        在webpack.config.js 的 entry 值里加上 react-hot-loader/patch

        步驟三:

        webpackDevServer.config.js中hot設置為true

        步驟四: 在webpack.config.dev.js中在babel-loader中plugins加入react-hot-loader/babel

        {
         test: /\.(js|jsx|mjs)$/,
         include: paths.appSrc,
         loader: require.resolve('babel-loader'),
         options: {
         // This is a feature of `babel-loader` for webpack (not Babel itself). It
         // enables caching results in ./node_modules/.cache/babel-loader/ directory for
         // faster rebuilds.
         cacheDirectory: true,
         plugins: [
         'react-hot-loader/babel'
         ]
         }
        },

        步驟五:

        重寫index.js,App掛載

        import { AppContainer } from 'react-hot-loader'
        const render = Component => {
         ReactDOM.render(
         <AppContainer>
         <Component></Component>
         </AppContainer>,
         document.getElementById('root')
         )
        }
        render(App)
        if(module.hot) {
         module.hot.accept('./App',() => {
         render(App);
         });
        }

        7-3. 本地瀏覽

        直接在package.json中 加入

        homepage:'.'

        后記:使用react與vue的感悟

        react是函數式編程,代碼難度、學習曲度、裝逼指數,社區生態多樣性相比vue更高一點。

        vue提供了大量的指令降低了開發難度,詳細完善的文檔,上手更快。

        react提供較少的api,相比vue的指令,業務場景的功能需要自己實現,難度更高一點

        vue適合中小型項目,單兵、少量人員配合快速開發

        react適合大型項目,多人協作

        相信看了本文案例你已經掌握了方法,更多精彩請關注Gxl網其它相關文章!

        推薦閱讀:

        配置打包文件路徑出錯怎樣解決

        怎樣做出點擊標題文字切換字體效果

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        react+antd做一個后臺管理系統

        react+antd做一個后臺管理系統:這次給大家帶來react+antd做一個后臺管理系統,react+antd做一個后臺管理系統的注意事項有哪些,下面就是實戰案例,一起來看一下。使用create-react-app腳手架具體基礎配置請參考配合antd組件實現的管理系統demo,線上地址開發前反思1. 按需加載webpa
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 午夜私人影院免费体验区| 久久永久免费人妻精品下载| 香蕉视频在线观看免费国产婷婷| 97亚洲熟妇自偷自拍另类图片| 一个人免费视频观看在线www| 中文字幕精品亚洲无线码二区| 亚洲五月午夜免费在线视频| 国产亚洲一区二区精品| 精品一区二区三区免费毛片爱 | 亚洲爱情岛论坛永久| 午夜精品射精入后重之免费观看 | 亚洲AV无码成人网站久久精品大 | 波多野结衣免费在线| 亚洲乱人伦精品图片| 日日操夜夜操免费视频| 狠狠热精品免费观看| 亚洲理论电影在线观看| 19禁啪啪无遮挡免费网站| 亚洲乱码在线卡一卡二卡新区| 黄网址在线永久免费观看| 国产成人无码精品久久久久免费| 亚洲成A∨人片在线观看不卡| 免费黄色网址网站| 美女尿口扒开图片免费| 久久被窝电影亚洲爽爽爽| 免费专区丝袜脚调教视频| 最新亚洲人成网站在线观看| 91麻豆国产自产在线观看亚洲| 久久99国产乱子伦精品免费| 亚洲AV永久无码精品一福利| 丁香五月亚洲综合深深爱| 2021国产精品成人免费视频| 理论秋霞在线看免费| 久久久无码精品亚洲日韩按摩| 免费毛片在线视频| 久久青草91免费观看| 亚洲Av永久无码精品一区二区| 久久亚洲精品成人综合| 老司机永久免费网站在线观看| 日韩免费在线视频| 看免费毛片天天看|