ReactAntd(一) 后台准备上半部分

React 后台管理架构

本篇讲述的是后台架构模型

  • 安装 React
  • 安装 Antd
  • 安装路由 react-router-dom
  • 铺设生产环境和开发环境
  • 铺设架构(架构和 style-component 支持等等)

(一) 安装 React

(1) 查看 npm 镜像源


npm config get registry

(2) 修改成淘宝镜像源


npm config set registry https://registry.npm.taobao.org

(3) 安装 react


npx create-react-app 名称

(4) 启动



cd 名称

npm run start

(二) 安装 antd

antd 是阿里推出的一款基于 React 的 UI 框架库,它是基于 less 开发的

(1) 运行 git 命令



git init

git add .

git commit -m "before ejecting"

(2) 敲命令打开 webpack 配置


npm run eject

(3) 安装包依赖

  • less 必须是 2.7.3 版本的


yarn add  less-loader babel-plugin-import -D

yarn add less@2.7.3 -D

yarn add antd -S

(4) 修改 webpack.config.js 文件

  • (1) 第一步 修改如下
const cssRegex = /\.css$/
const cssModuleRegex = /\.module\.css$/
//增加的代码
const lessRegex = /\.less$/
const lessModuleRegex = /\.module\.less$/
//增加结束
const sassRegex = /\.(scss|sass)$/
const sassModuleRegex = /\.module\.(scss|sass)$/
  • (2) 第二步修改 loader 依赖,增加 less 依赖


{
    test: cssModuleRegex,
    use: getStyleLoaders({
      importLoaders: 1,
      sourceMap: isEnvProduction && shouldUseSourceMap,
      modules: true,
      getLocalIdent: getCSSModuleLocalIdent
    })
},
   //增加的代码
  // Opt-in support for SASS (using .scss or .sass extensions).
  // By default we support SASS Modules with the
  // extensions .module.scss or .module.sass
  {
    test: lessRegex,
    exclude: lessModuleRegex,
    use: getStyleLoaders(
      {
        importLoaders: 2,
        sourceMap: isEnvProduction && shouldUseSourceMap
      },
      'less-loader'
    ),

    sideEffects: true
  },
  {
    test: lessModuleRegex,
    use: getStyleLoaders(
      {
        importLoaders: 2,
        sourceMap: isEnvProduction && shouldUseSourceMap,
        modules: true,
        getLocalIdent: getCSSModuleLocalIdent
      },
      'less-loader'
    )
  },
  //增加结束
  • (3) 第三步 修改 package.json 文件

"babel": {
    "presets": [
      "react-app"
    ],
    "plugins": [
      [
        "import",
        {
          "libraryName": "antd",
          "libraryDirectory": "es",
          "style": true
        }
      ]
    ]
  }
  • (4) 第四步修改 getStyleLoaders 方法
if (preProcessor) {
  if (preProcessor === 'less-loader') {
    loaders.push({
      loader: require.resolve(preProcessor),
      options: {
        sourceMap: isEnvProduction && shouldUseSourceMap,
        lessOptions: {
          // 如果使用less-loader@5,请移除 lessOptions 这一级直接配置选项。
          modifyVars: {
            'primary-color': '#1DA57A',
            'link-color': '#1DA57A',
            'border-radius-base': '2px',
          },
          javascriptEnabled: true,
        },
      },
    })
  } else {
    loaders.push(
      {
        loader: require.resolve('resolve-url-loader'),
        options: {
          sourceMap: isEnvProduction && shouldUseSourceMap,
        },
      },
      {
        loader: require.resolve(preProcessor),
        options: {
          sourceMap: true,
        },
      }
    )
  }
}
return loaders

(5) 这样 antd 安装完成

(三) 安装路由依赖包和 styled-components 包依赖

  • 安装路由依赖包

cnpm i  react-router-dom -S
  • 安装 styled-components (用 js 方式写 css)

cnpm i styled-components -S

(四) 铺设生产环境和开发环境

(1) 在 package.json 文件中配置打包命令


  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "start:test": "set REACT_APP_MODE=test&& react-scripts start",
    "start:stage": "set REACT_APP_MODE=stage&& react-scripts start",
    "start:localhost": "set REACT_APP_MODE=localhost&& react-scripts start",
    "build:dev": "set REACT_APP_MODE=development&& react-scripts build",
    "build:pro": "set REACT_APP_MODE=production&& react-scripts build",
    "eject": "react-scripts eject"
  },

(2) 在 src 目录下新建一个文件夹 config 里面写几个文件(src 目录)

  • api_development.js
let url = {
  homeurl: 'www.development.com',
}
export default url
  • api_localhost.js
let url = {
  homeurl: 'www.localhost.com',
}
export default url
  • api_production.js
let url = {
  homeurl: 'www.production.com',
}
export default url
  • api_stage.js
let url = {
  homeurl: 'www.stage.com',
}
export default url
  • api_test.js
let url = {
  homeurl: 'www.test.com',
}
export default url

(3) 在 src 目录下新建一个 config.js

import developmentapi from './config/api_development.js'
import productionapi from './config/api_production.js'
import testapi from './config/api_test.js'
import localhostapi from './config/api_localhost.js'
import stageapi from './config/api_stage.js'
let url
if (process.env.REACT_APP_MODE === 'development') {
  console.log('开发环境')
  url = developmentapi
} else if (process.env.REACT_APP_MODE === 'production') {
  console.log('生产环境')
  url = productionapi
} else if (process.env.REACT_APP_MODE === 'test') {
  console.log('测试环境')
  url = testapi
} else if (process.env.REACT_APP_MODE === 'localhost') {
  console.log('localhost环境')
  url = localhostapi
} else if (process.env.REACT_APP_MODE === 'stage') {
  console.log('stage环境')
  url = stageapi
}

export default url

(4) 在引用的页面直接引用 config.js 即可

import React, { Component, Fragment } from 'react'
import url from './config.js'
class App extends Component {
  constructor(props) {
    super(props)
    this.state = {
      message: '首页',
    }
  }
  render() {
    return (
      <Fragment>
        <div>{url.homeurl}</div>
      </Fragment>
    )
  }
}

export default App

(5) 然后敲不同的命令来调用不同的接口



npm run start:test

npm run start:stage

npm run build:dev
.
.
.

(五) 铺设架构

(1) 修改 src 目录下 index.js 修改如下

  • reset.css 就是页面初始化加载的文件
import React from 'react'
import ReactDOM from 'react-dom'
import './reset.css'
import RouterDom from './router.js'
ReactDOM.render(
  <React.StrictMode>
    <RouterDom />
  </React.StrictMode>,
  document.getElementById('root')
)

(2) 在 src 目录下 新建一个 名字叫 router.js 文件

import React, { Component } from 'react'

import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'

import App from './App'
import LoginPages from './Pages/Login'
import CommonPages from './Pages/Common'
import AdminPages from './Pages/Admin'
import NotFoundPages from './Pages/Notfound'
import ButtonPages from './Components/Ui/Button/Button'
import HomePages from './Components/Home/Home'

// 思路就是index.js加载路由,路由里面最外层是App,App里面在嵌套。二级路由这里和Vue不一样,必须是写全了
class RouterDom extends Component {
  state = {}
  render() {
    return (
      <Router>
        <App>
          <Switch>
            <Route exact path="/" component={LoginPages}></Route>
            <Route exact path="/common" component={CommonPages}></Route>
            <Route
              path="/admin"
              render={() => (
                <AdminPages>
                  <Switch>
                    {/* 在React里面路径必须写全称二级的也必须带上前面 */}
                    <Route path="/admin/button" component={ButtonPages}></Route>
                    <Route path="/admin/home" component={HomePages}></Route>
                    <Route to="/notfound" component={NotFoundPages}></Route>
                  </Switch>
                </AdminPages>
              )}
            ></Route>
            {/* 上面找不到的就用to这样他会自动匹配 */}
            <Route to="/notfound" component={NotFoundPages}></Route>
          </Switch>
        </App>
      </Router>
    )
  }
}

export default RouterDom

(3) 修改 APP.js 如下

import React, { Component, Fragment } from 'react'
class App extends Component {
  state = {}
  render() {
    return <Fragment>{this.props.children}</Fragment>
  }
}

export default App

(4)在 src 目录下面新建一个文件夹起名叫 Pages(这个文件夹里面放的就是页面基础文件)

我只是举例 具体页面多少要依据开发需求来定

  • Admin.js

  • Common.js

  • Login.js

  • Notfound.js

下面是 Admin.js 架构,因为 在 admin 下面有二级目录

import React, { Component, Fragment } from 'react'
class Admin extends Component {
  constructor(props) {
    super(props)
    this.state = {
      message: 'admin页面',
    }
  }
  render() {
    return (
      <Fragment>
        {this.state.message}
        ----------------
        <div>{this.props.children}</div>
      </Fragment>
    )
  }
}

export default Admin

下面是 Common.js 内容

import React, { Component, Fragment } from 'react'
class CommonDom extends Component {
  constructor(props) {
    super(props)
    this.state = {
      message: '通用页面',
    }
  }
  render() {
    return <Fragment>{this.state.message}</Fragment>
  }
}

export default CommonDom

(5) 在 src 新建一个 Components(里面是要引入的 Componets)

对应的 router.js 里面引入组件的目录

  • 然后在新建一个文件夹 Ui 在在 Ui 文件夹里面在新建一个文件夹 Button
import React, { Component, Fragment } from 'react'
class UiButton extends Component {
  constructor(props) {
    super(props)
    this.state = {
      message: '按钮',
    }
  }
  render() {
    return <Fragment>{this.state.message}</Fragment>
  }
}

export default UiButton
  • 按照上面的步骤可以在创建一个 Home.js

(6) styled-components 使用就不多说了

(7) 安装 react-Redux 第二节介绍


文章作者: 雾烟云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 雾烟云 !
  目录