成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【單頁面博客從前端到后端】基于 DVA+ANTD 搭建博客前后臺(tái)界面

zqhxuyuan / 860人閱讀

摘要:在的的配置中添加自定義主題由腳手架和官網(wǎng)介紹,我們已經(jīng)自己配置并新建好了主題文件。單頁面博客從前端到后端環(huán)境搭建單頁面博客從前端到后端基于搭建博客前后臺(tái)界面單頁面博客從前端到后端基于和的權(quán)限驗(yàn)證與的設(shè)計(jì)

在上篇文章我們已經(jīng)搭建好了基礎(chǔ)的開發(fā)環(huán)境,接下來會(huì)介紹如何引入 DVA 和 ANTD ,以及在引入過程中需要注意的問題。這里只會(huì)詳細(xì)的書寫部分組件,其他的組件都是大同小異。你可以在 github倉庫 中找到這些組件。

博客的原型圖

這里我簡單的畫了一個(gè)博客的輪廓圖。這樣在寫組件的過程中有助于有個(gè)整體性的思路,不迷路…

添加目錄結(jié)構(gòu)
blog 
├─ dist           # 輸出目錄
├─ task           # 這里來放webpack處理和配置文件
├─ src
|  ├─ assets      # 靜態(tài)文件文件夾
|  ├─ components  # 組件
|  |  ├─ Home     # Home 頁面的文件夾
|  |  ├─ Archive 
|  |  ├─ About
|  |  ├─ Admin    # 后臺(tái)界面文件夾
|  |  ├─ Header.js    # 公共的 Header 組件
|  |  ├─ Footer.js    # 公共的 Footer 組件
|  |  ├─ UserCard.js  # 公共的 UserCard 組件
|  |  ├─ Login.js     # 公共的 Login 組件
|  ├─ containers  # Redux 的容器組件
|  |  ├─ Home.js      # Home 組件的容器
|  |  ├─ Archive.js
|  |  ├─ About.js
|  |  ├─ Admin        # 后臺(tái)各界面的容器文件夾
|  ├─ router.js   # React 路由
|  └ index.js     # 入口文件
| package.json
引入 DVA 和 ANTD DVA 的簡單引入

Lightweight front-end framework based on redux, redux-saga and [email protected]. (Inspired by elm and choo)

要知道 dva 是對 redux , redux-saga , react-router 的封裝,使用上有點(diǎn)像 express.js ,那么你就要多少對他們有所了解,dva 的 github 倉庫 有詳細(xì)的入門指南、概念和示例,可以先去了解一下 。

更改入口文件 src/index.js

import dva from "dva"
const app = dva()

app.router(require("./router"))
app.start("#root")

新建路由文件 src/router.js

import React from "react"
import { Router, Route, IndexRoute, IndexRedirect } from "dva/router"

import AppLayout from "./container/App"
import Home from "./container/Home"
import Archive from "./container/Archive"
import About from "./container/About"
import Article from "./container/Article"
import AdminArticles from "./container/Admin/Articles"
import AdminKeywrods from "./container/Admin/Keywords"
import AdminEditor from "./container/Admin/Editor"
import AdminLayout from "./container/Admin/Admin"

export default ({history, app}) => {
    return (
        
            
                
                
                
                
                
                    
                    
                    
                    
                
            
        
    )
}

從這里可以看出, dva 自己在內(nèi)部引入 react-router-redux ,然后使用 react-router-redux 提供的 combineReducers routerRedux 合并到用戶的 reducers

限于文章的篇幅,dvamodel 的設(shè)計(jì)會(huì)放到下一次的文章來描述

引入 ANTD

按需加載

在引入 ANTD 之前,我們先來實(shí)現(xiàn) 按需加載 。其實(shí)概念很簡單,就是我們在引入一個(gè)樣式庫的時(shí)候,往往只會(huì)用到這個(gè)樣式庫的部分組件,但是工具會(huì)把整個(gè)組件庫都打包到我們的項(xiàng)目中,這是我們不想看到的。按需加載 就是用來打包我們引入的組件,可以使用 babel-plugin-import 來具體實(shí)現(xiàn)。

task/config.jsbabel-loader 的 plugins 配置中添加:
["import", { "libraryName": "antd", "style": true }]

自定義主題

由腳手架 atool-build 和 官網(wǎng)介紹,我們已經(jīng)自己配置并新建好了主題文件 theme.js

添加 less-loader 處理樣式文件

上節(jié)我們只是添加了對 .module.less 文件進(jìn)行編譯,在自定義主題時(shí),需要對 less 變量進(jìn)行覆蓋,所以要求 babel-plugin-importstyle 選項(xiàng)設(shè)置為 true ,讓它導(dǎo)出 antd 組件的 .less 樣式文件才能進(jìn)行變量覆蓋操作。

task/config.jsmodule.rules 追加

{
    test: function(path){
        return /.less$/.test(path) && !/.module.less$/.test(path)
    },
    loader: ExtractTextPlugin.extract({
        fallback: "style-loader", 
        use: [
            {
                loader: "css-loader", 
            },
            {
                loader: "postcss-loader",
                options: {
                    plugins: postcssPlugins
                }
            },
            {
                loader: "less-loader", 
                options: {"modifyVars": theme}
            }
        ]
    })
},

注意 /.less/ 至少會(huì)匹配到 .module.less.less 文件,所以要排除 .module.less ,因?yàn)樗枰?css-module 處理。

你也可能會(huì)通過添加 exclude , include 來對樣式庫中的 less 文件和自己編寫的文件進(jìn)行區(qū)別,畢竟樣式庫肯定都是從 node_modules 目錄中加載,而自己的是從 src 目錄下加載的。也正因?yàn)闃邮綆焓菑?node_modules 目錄下加載的,所以這樣做可能會(huì)導(dǎo)致降低 webpack 的編譯速度。

添加容器組件和展示組件 容器組件

/src/containers 下新建 App.js

import React, { PropTypes } from "react"
import { connect } from "dva"
import { Layout, Menu, Breadcrumb, Row, Col, Icon } from "antd"
import HeaderComponent from "components/Header"
import FooterComponent from "components/Footer"
import LoginModel from "components/Login"
const { Header, Content, Footer } = Layout

const App = ({children, routes}) => {
    return (
        
            
{}} />
{children}
) } export default connect()(App)

因?yàn)?dva 封裝了 redux , 源文件 中也是直接導(dǎo)出 react-reduxconnect 方法。所以在創(chuàng)建容器組件的時(shí)候還是等同于 react-redux 。

注意,這個(gè) App組件是作為子路由組件的父組件,即 children 代表的就是那些子組件 Home , Archive

其他的展示組件,即 /src/containers 文件夾下面的組件,都是大同小異,就不一一贅述。

展示組件

我們看到 src/container/App.js 展示組件,引入了一個(gè) HeaderComponent ,在 src/components 下面新建一個(gè) Header.js

import React from "react"
import { Layout, Menu, Breadcrumb, Row, Col } from "antd"
import { Router, Link } from "dva/router"

const HeaderComponent = (props) => {
    const { children, routes } = props
    const routePath = (routes[routes.length - 1] || {}).path || "/"
    return (
        
Home Archive About me
{children}
) } export default HeaderComponent

這就是個(gè)普通的 React 的展示組件沒什么好說的,這些組件可以直接在 Antd 的官網(wǎng)上找到用法,而且都有示例代碼。

const routePath = (routes[routes.length - 1] || {}).path || "/"
找到路由路徑中的最后一個(gè)名稱,如 /home 中的 home ,作為 Menu 的默認(rèn)選中項(xiàng),這樣在當(dāng)前頁面刷新,就可以讓當(dāng)前頁面對應(yīng)的導(dǎo)航高亮。

其他的展示型組件也都是大同小異,你可以在 github倉庫 中找到它們的實(shí)現(xiàn)。

引入 url-loader 來處理文件路徑

task/config.js 中的 module.rules 追加:

{
    test: /.(png|jpe?g|gif|svg)(?.*)?$/,
    loader: "url-loader",
    options: {
        limit: 10000,
        name: "img/[name].[hash:7].[ext]"
    }
},
{
    test: /.(woff2?|eot|ttf|otf)(?.*)?$/,
    loader: "url-loader",
    options: {
        limit: 10000,
        name: "fonts/[name].[hash:7].[ext]"
    }
},

關(guān)于 url-loader 的配置方法,可以在 webpack 的文檔中查看

小結(jié)

這篇文章主要是引入了兩個(gè)重要的庫 dvaantd ,以及編寫部分展示組件。接下來,我們會(huì)對 dva 的數(shù)據(jù)層,已經(jīng)后臺(tái)初步搭建,同步進(jìn)行前后端的開發(fā)。

【單頁面博客從前端到后端】環(huán)境搭建

【單頁面博客從前端到后端】基于 DVA+ANTD 搭建博客前后臺(tái)界面

【單頁面博客從前端到后端】基于 Passport 和 Koa@2 的權(quán)限驗(yàn)證與 DVA 的 Model 設(shè)計(jì)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/87012.html

相關(guān)文章

  • 頁面博客前端后端

    摘要:說到底,當(dāng)自己獨(dú)自開發(fā)從搭建開發(fā)環(huán)境,到前端的每一個(gè)組件,到動(dòng)作交互,再到和后端的數(shù)據(jù)交互,難免遇到不少問題。單頁面博客從前端到后端基于和的權(quán)限驗(yàn)證與的設(shè)計(jì)引入來實(shí)現(xiàn)富文本編輯器是開源的用于構(gòu)建富文本編輯器的框架。 不會(huì)后端的前端,不會(huì)寫單頁面應(yīng)用... 單頁面應(yīng)用的概念已經(jīng)被提出很長時(shí)間了,無論是基于 vue, angular 還是 react,相信大家或是耳濡目染,或是設(shè)身處地都有...

    whinc 評論0 收藏0
  • 頁面博客前端后端】環(huán)境搭建

    摘要:的配置其中就不多說會(huì)解決更改組件的時(shí)熱更新直接刷新頁面的問題。 工欲善其事,必先利其器。單頁面應(yīng)用的開發(fā)和生產(chǎn)環(huán)境涉及文件的編譯、壓縮、打包、合并等,目前前端最流行的莫過于 webpack 。為了深入了解 webpack 以及其相關(guān)插件,我們決定不采用腳手架,自己來搭建基于 webpack 的開發(fā)和生產(chǎn)環(huán)境。 基礎(chǔ)環(huán)境 nodejs的安裝: 移步官網(wǎng) 建議使用nvm來管理nodejs...

    wizChen 評論0 收藏0
  • 頁面博客前端后端基于 Passport 和 Koa@2 的權(quán)限驗(yàn)證與 DVA 的 Mode

    摘要:我們就采用這種方式來進(jìn)行權(quán)限驗(yàn)證。這里我還是使用在中的下新增單頁面博客從前端到后端環(huán)境搭建單頁面博客從前端到后端基于搭建博客前后臺(tái)界面單頁面博客從前端到后端基于和的權(quán)限驗(yàn)證與的設(shè)計(jì) 基于 JWT 的權(quán)限驗(yàn)證 這里有一篇文章描述的已經(jīng)非常詳盡,闡述了 JWT 驗(yàn)證相比較傳統(tǒng)的持久化 session 驗(yàn)證的優(yōu)勢,以及基于 angular 和 express 驗(yàn)證的簡單流程。 基于Json ...

    luodongseu 評論0 收藏0
  • 使用React、Electron、Dva、Webpack、Node.js、Websocket快速構(gòu)建

    摘要:是一個(gè)使用和等技術(shù)創(chuàng)建原生程序的框架,它負(fù)責(zé)比較難搞的部分,你只需把精力放在你的應(yīng)用的核心上即可。談?wù)劶夹g(shù)選型使用去做底層的繪制,大項(xiàng)目首選狀態(tài)管理的最佳實(shí)踐肯定不是,目前首選,或者。 showImg(https://segmentfault.com/img/bVbtqlI?w=1308&h=565); 目前Electron在github上面的star量已經(jīng)快要跟React-nativ...

    Caicloud 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<