国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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:41:55
文檔

如何使用react配合antd組件實現管理系統

如何使用react配合antd組件實現管理系統:這次給大家帶來如何使用react配合antd組件實現管理系統,使用react配合antd組件實現管理系統的注意事項有哪些,下面就是實戰案例,一起來看一下。使用create-react-app腳手架具體基礎配置請參考配合antd組件實現的管理系統demo,線上地址開發前反思1.
推薦度:
導讀如何使用react配合antd組件實現管理系統:這次給大家帶來如何使用react配合antd組件實現管理系統,使用react配合antd組件實現管理系統的注意事項有哪些,下面就是實戰案例,一起來看一下。使用create-react-app腳手架具體基礎配置請參考配合antd組件實現的管理系統demo,線上地址開發前反思1.
這次給大家帶來如何使用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網其它相關文章!

推薦閱讀:

如何使用vue實現短信驗證性能優化

在Vue中使用vue-i18插件實現多語言切換

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

文檔

如何使用react配合antd組件實現管理系統

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

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 全免费a级毛片免费看不卡 日本二区在线观看 | 久久久久女人精品毛片九一 | 亚洲色图在线播放 | 免费观看欧美一区二区三区 | 夜夜操夜夜 | 视频一区二区三区在线 | 国产91精品高清一区二区三区 | 国产精品123| 在线 v亚洲 v欧美v 专区 | 成人午夜精品久久久久久久小说 | 精品一区二区三区四区电影 | 亚洲一区二区免费看 | 亚洲 欧美 国产另类首页 | 欧美精品亚洲网站 | 国产精品ⅴ视频免费观看 | 亚洲激情综合 | 亚洲欧美日韩精品永久在线 | 一级全黄60分钟免费网站 | 97r久久精品国产99国产精 | 亚洲欧美日韩高清中文在线 | 亚洲欧美偷拍另类 | 另类专区另类专区亚洲 | 欧美在线免费观看视频 | 国产在线精品成人一区二区三区 | 国产欧美在线视频免费 | 国产 日韩 欧美 亚洲 | 日韩第三页 | 成人精品一级毛片 | 欧美综合一区 | 日本v片免费一区二区三区 欧洲精品欧美精品 | 99视频在线免费看 | 亚洲欧美在线综合 | 亚洲综合一区二区精品久久 | 自怕偷自怕亚洲精品 | 欧美视频一区二区三区在线观看 | 久久精品国产一区二区三区日韩 | 欧美 日韩 国产在线 | 中国亲与子乱αy | 亚洲欧美色视频 | 精品久久久久久久久中文字幕 | 黄网站免费观看 |