摘要:在的的配置中添加自定義主題由腳手架和官網介紹,我們已經自己配置并新建好了主題文件。單頁面博客從前端到后端環境搭建單頁面博客從前端到后端基于搭建博客前后臺界面單頁面博客從前端到后端基于和的權限驗證與的設計
在上篇文章我們已經搭建好了基礎的開發環境,接下來會介紹如何引入 DVA 和 ANTD ,以及在引入過程中需要注意的問題。這里只會詳細的書寫部分組件,其他的組件都是大同小異。你可以在 github倉庫 中找到這些組件。
博客的原型圖這里我簡單的畫了一個博客的輪廓圖。這樣在寫組件的過程中有助于有個整體性的思路,不迷路…
添加目錄結構blog ├─ dist # 輸出目錄 ├─ task # 這里來放webpack處理和配置文件 ├─ src | ├─ assets # 靜態文件文件夾 | ├─ components # 組件 | | ├─ Home # Home 頁面的文件夾 | | ├─ Archive | | ├─ About | | ├─ Admin # 后臺界面文件夾 | | ├─ Header.js # 公共的 Header 組件 | | ├─ Footer.js # 公共的 Footer 組件 | | ├─ UserCard.js # 公共的 UserCard 組件 | | ├─ Login.js # 公共的 Login 組件 | ├─ containers # Redux 的容器組件 | | ├─ Home.js # Home 組件的容器 | | ├─ Archive.js | | ├─ About.js | | ├─ Admin # 后臺各界面的容器文件夾 | ├─ router.js # React 路由 | └ index.js # 入口文件 | package.json引入 DVA 和 ANTD DVA 的簡單引入
Lightweight front-end framework based on redux, redux-saga and react-router@2.x. (Inspired by elm and choo)
要知道 dva 是對 redux , redux-saga , react-router 的封裝,使用上有點像 express.js ,那么你就要多少對他們有所了解,dva 的 github 倉庫 有詳細的入門指南、概念和示例,可以先去了解一下 。
更改入口文件 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 自己在內部引入 react-router-redux ,然后使用 react-router-redux 提供的 combineReducers 把 routerRedux 合并到用戶的 reducers 中
引入 ANTD限于文章的篇幅,dva 的 model 的設計會放到下一次的文章來描述
按需加載
在引入 ANTD 之前,我們先來實現 按需加載 。其實概念很簡單,就是我們在引入一個樣式庫的時候,往往只會用到這個樣式庫的部分組件,但是工具會把整個組件庫都打包到我們的項目中,這是我們不想看到的。按需加載 就是用來打包我們引入的組件,可以使用 babel-plugin-import 來具體實現。
在 task/config.js 的 babel-loader 的 plugins 配置中添加:
["import", { "libraryName": "antd", "style": true }]
自定義主題
由腳手架 atool-build 和 官網介紹,我們已經自己配置并新建好了主題文件 theme.js 。
添加 less-loader 處理樣式文件
上節我們只是添加了對 .module.less 文件進行編譯,在自定義主題時,需要對 less 變量進行覆蓋,所以要求 babel-plugin-import 的 style 選項設置為 true ,讓它導出 antd 組件的 .less 樣式文件才能進行變量覆蓋操作。
在 task/config.js 中 module.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/ 至少會匹配到 .module.less 和 .less 文件,所以要排除 .module.less ,因為它需要被 css-module 處理。
你也可能會通過添加 exclude , include 來對樣式庫中的 less 文件和自己編寫的文件進行區別,畢竟樣式庫肯定都是從 node_modules 目錄中加載,而自己的是從 src 目錄下加載的。也正因為樣式庫是從 node_modules 目錄下加載的,所以這樣做可能會導致降低 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 () } export default connect()(App) {}} /> {children}
因為 dva 封裝了 redux , 源文件 中也是直接導出 react-redux 的 connect 方法。所以在創建容器組件的時候還是等同于 react-redux 。
注意,這個 App組件是作為子路由組件的父組件,即 children 代表的就是那些子組件 Home , Archive …
其他的展示組件,即 /src/containers 文件夾下面的組件,都是大同小異,就不一一贅述。
展示組件我們看到 src/container/App.js 展示組件,引入了一個 HeaderComponent ,在 src/components 下面新建一個 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 () } export default HeaderComponent|
{children}
這就是個普通的 React 的展示組件沒什么好說的,這些組件可以直接在 Antd 的官網上找到用法,而且都有示例代碼。
const routePath = (routes[routes.length - 1] || {}).path || "/"
找到路由路徑中的最后一個名稱,如 /home 中的 home ,作為 Menu 的默認選中項,這樣在當前頁面刷新,就可以讓當前頁面對應的導航高亮。
其他的展示型組件也都是大同小異,你可以在 github倉庫 中找到它們的實現。
引入 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]" } },
關于 url-loader 的配置方法,可以在 webpack 的文檔中查看
小結這篇文章主要是引入了兩個重要的庫 dva 和 antd ,以及編寫部分展示組件。接下來,我們會對 dva 的數據層,已經后臺初步搭建,同步進行前后端的開發。
【單頁面博客從前端到后端】環境搭建
【單頁面博客從前端到后端】基于 DVA+ANTD 搭建博客前后臺界面
【單頁面博客從前端到后端】基于 Passport 和 Koa@2 的權限驗證與 DVA 的 Model 設計
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/87012.html
摘要:說到底,當自己獨自開發從搭建開發環境,到前端的每一個組件,到動作交互,再到和后端的數據交互,難免遇到不少問題。單頁面博客從前端到后端基于和的權限驗證與的設計引入來實現富文本編輯器是開源的用于構建富文本編輯器的框架。 不會后端的前端,不會寫單頁面應用... 單頁面應用的概念已經被提出很長時間了,無論是基于 vue, angular 還是 react,相信大家或是耳濡目染,或是設身處地都有...
摘要:的配置其中就不多說會解決更改組件的時熱更新直接刷新頁面的問題。 工欲善其事,必先利其器。單頁面應用的開發和生產環境涉及文件的編譯、壓縮、打包、合并等,目前前端最流行的莫過于 webpack 。為了深入了解 webpack 以及其相關插件,我們決定不采用腳手架,自己來搭建基于 webpack 的開發和生產環境。 基礎環境 nodejs的安裝: 移步官網 建議使用nvm來管理nodejs...
摘要:我們就采用這種方式來進行權限驗證。這里我還是使用在中的下新增單頁面博客從前端到后端環境搭建單頁面博客從前端到后端基于搭建博客前后臺界面單頁面博客從前端到后端基于和的權限驗證與的設計 基于 JWT 的權限驗證 這里有一篇文章描述的已經非常詳盡,闡述了 JWT 驗證相比較傳統的持久化 session 驗證的優勢,以及基于 angular 和 express 驗證的簡單流程。 基于Json ...
摘要:是一個使用和等技術創建原生程序的框架,它負責比較難搞的部分,你只需把精力放在你的應用的核心上即可。談談技術選型使用去做底層的繪制,大項目首選狀態管理的最佳實踐肯定不是,目前首選,或者。 showImg(https://segmentfault.com/img/bVbtqlI?w=1308&h=565); 目前Electron在github上面的star量已經快要跟React-nativ...
閱讀 770·2021-09-30 09:46
閱讀 3777·2021-09-03 10:45
閱讀 3609·2019-08-30 14:11
閱讀 2543·2019-08-30 13:54
閱讀 2255·2019-08-30 11:00
閱讀 2347·2019-08-29 13:03
閱讀 1553·2019-08-29 11:16
閱讀 3581·2019-08-26 13:52