摘要:官方文檔中文文檔基本使用注意一定要在根目錄的中聲明,要不然點(diǎn)擊任何鏈接都無(wú)法跳轉(zhuǎn)。官方文檔中文文檔簡(jiǎn)單的來(lái)說(shuō),每一次的修改狀態(tài)都需要觸發(fā),然而其實(shí)項(xiàng)目中我現(xiàn)在還沒(méi)用到修改數(shù)據(jù)。。。
學(xué)習(xí) React 的過(guò)程中實(shí)現(xiàn)了一個(gè)個(gè)人主頁(yè),沒(méi)有復(fù)雜的實(shí)現(xiàn)和操作,適合入門(mén) ~
原文地址:https://github.com/axuebin/react-blog/issues/17
這個(gè)項(xiàng)目其實(shí)功能很簡(jiǎn)單,就是常見(jiàn)的主頁(yè)、博客、demo、關(guān)于我等功能。
頁(yè)面樣式都是自己寫(xiě)的,黑白風(fēng)格,可能有點(diǎn)丑。不過(guò)還是最低級(jí)的 CSS ,準(zhǔn)備到時(shí)候重構(gòu) ~
如果有更好的方法,或者是我的想法有偏差的,歡迎大家交流指正
歡迎參觀:http://axuebin.com/react-blog
Github:https://github.com/axuebin/react-blog
預(yù)覽圖 首頁(yè) 博客頁(yè) 文章內(nèi)容頁(yè) Demo頁(yè) 關(guān)鍵技術(shù)ES6:項(xiàng)目中用到 ES6 的語(yǔ)法,在寫(xiě)的過(guò)程中盡量使用,可能有的地方?jīng)]想到
React
React-Router:前端路由
React-Redux:狀態(tài)管理
webpack:打包
marked:Markdown渲染
highlight.js:代碼高亮
fetch:異步請(qǐng)求數(shù)據(jù)
eslint:代碼檢查
antd:部分組件懶得自己寫(xiě)。。
準(zhǔn)備工作由于不是使用 React 腳手架生成的項(xiàng)目,所以每個(gè)東西都是自己手動(dòng)配置的。。。
模塊打包器打包用的是 webpack 2.6.1,準(zhǔn)備入坑 webpack 3 。
官方文檔:https://webpack.js.org/
中文文檔:https://doc.webpack-china.org/
對(duì)于 webpack 的配置還不是太熟,就簡(jiǎn)單的配置了一下可供項(xiàng)目啟動(dòng):
var webpack = require("webpack"); var path = require("path"); module.exports = { context: __dirname + "/src", entry: "./js/index.js", module: { loaders: [ { test: /.js?$/, exclude: /(node_modules)/, loader: "babel-loader", query: { presets: ["react", "es2015"] } }, { test: /.css$/, loader: "style-loader!css-loader" }, { test: /.js$/, exclude: /(node_modules)/, loader: "eslint-loader" }, { test: /.json$/, loader: "json-loader" } ] }, output: { path: __dirname + "/src/", filename: "bundle.js" } }
webpack 有幾個(gè)重要的屬性:entry、module、output、plugins,在這里我還沒(méi)使用到插件,所以沒(méi)有配置 plugins 。
module 中的 loaders:
babel-loader:將代碼轉(zhuǎn)換成es5代碼
css-loader:處理css中路徑引用等問(wèn)題
style-loader:動(dòng)態(tài)把樣式寫(xiě)入css
eslin-loader:使用eslint
包管理包管理現(xiàn)在使用的還是 NPM 。
官方文檔:https://docs.npmjs.com/
npm init
npm install
npm uninstall
關(guān)于npm,可能還需要了解 dependencies 和 devDependencies 的區(qū)別,我是這樣簡(jiǎn)單理解的:
dependencies:項(xiàng)目跑起來(lái)后需要使用到的模塊
devDependencies:開(kāi)發(fā)的時(shí)候需要用的模塊,但是項(xiàng)目跑起來(lái)后就不需要了
代碼檢查項(xiàng)目使用現(xiàn)在比較流行的 ESLint 作為代碼檢查工具,并使用 Airbnb 的檢查規(guī)則。
ESLint:https://github.com/eslint/eslint
eslint-config-airbnb:https://www.npmjs.com/package/eslint-config-airbnb
在 package.json 中可以看到,關(guān)于 ESLint 的包就是放在 devDependencies 底下的,因?yàn)樗皇窃陂_(kāi)發(fā)的時(shí)候會(huì)使用到。
使用在 webpack 配置中加載 eslint-loader:
module: { loaders: [ { test: /.js$/, exclude: /(node_modules)/, loader: "eslint-loader" } ] }
創(chuàng)建 .elintrc文件:
{ "extends": "airbnb", "env":{ "browser": true }, "rules":{} }
然后在運(yùn)行 webpack 的時(shí)候,就會(huì)執(zhí)行代碼檢查啦,看著一堆的 warning 、error 是不是很爽~
這里有常見(jiàn)的ESLint規(guī)則:http://eslint.cn/docs/rules/
數(shù)據(jù)源由于是為了練習(xí) React,暫時(shí)就只考慮搭建一個(gè)靜態(tài)頁(yè)面,而且現(xiàn)在越來(lái)越多的大牛喜歡用 Github Issues 來(lái)寫(xiě)博客,也可以更好的地提供評(píng)論功能,所以我也想試試用 Github Issues 來(lái)作為博客的數(shù)據(jù)源。
API在這:https://developer.github.com/v3/issues/
我也沒(méi)看完全部的API,就看了看怎么獲取 Issues 列表。。
https://api.github.com/repos/axuebin/react-blog/issues?creator=axuebin&labels=blog
通過(guò)控制參數(shù) creator 和 labels,可以篩選出作為展示的 Issues。它會(huì)返回一個(gè)帶有 issue 格式對(duì)象的數(shù)組。每一個(gè) issue 有很多屬性,我們可能不需要那么多,先了解了解底下這幾種:
// 為了方便,我把注釋寫(xiě)在json中了。。 [{ "url": , // issue 的 url "id": , // issue id , 是一個(gè)隨機(jī)生成的不重復(fù)的數(shù)字串 "number": , // issue number , 根據(jù)創(chuàng)建 issue 的順序從1開(kāi)始累加 "title": , // issue 的標(biāo)題 "labels": [], // issue 的所有 label,它是一個(gè)數(shù)組 "created_at": , // 創(chuàng)建 issue 的時(shí)間 "updated_at": , // 最后修改 issue 的時(shí)間 "body": , // issue 的內(nèi)容 }]異步請(qǐng)求數(shù)據(jù)
項(xiàng)目中使用的異步請(qǐng)求數(shù)據(jù)的方法時(shí) fetch。
關(guān)于 fetch :https://segmentfault.com/a/1190000003810652
使用起來(lái)很簡(jiǎn)單:
fetch(url).then(response => response.json()) .then(json => console.log(json)) .catch(e => console.log(e));markdown 渲染
在 Github 上查找關(guān)于如何在 React 實(shí)現(xiàn) markdown 的渲染,查到了這兩種庫(kù):
react-markdown:https://github.com/rexxars/react-markdown
marked:https://github.com/chjj/marked
使用起來(lái)都很簡(jiǎn)單。
如果是 react-markdown,只需要這樣做:
import ReactMarkdown from "react-markdown"; const input = "# This is a header And this is a paragraph"; ReactDOM.render(, document.getElementById("container") );
如果是marked,這樣做:
import marked from "marked"; const input = "# This is a header And this is a paragraph"; const output = marked(input);
這里有點(diǎn)不太一樣,我們獲取到了一個(gè)字符串 output,注意,是一個(gè)字符串,所以我們得將它插入到 dom中,在 React 中,我們可以這樣做:
由于我們的項(xiàng)目是基于 React 的,所以想著用 react-markdown會(huì)更好,而且由于安全問(wèn)題 React 也不提倡直接往 dom 里插入字符串,然而在使用過(guò)程中發(fā)現(xiàn),react-markdown 對(duì)表格的支持不友好,所以只好棄用,改用 marked。
代碼高亮代碼高亮用的是highlight.js:https://github.com/isagalaev/highlight.js
它和marked可以無(wú)縫銜接~
只需要這樣既可:
import hljs from "highlight.js"; marked.setOptions({ highlight: code => hljs.highlightAuto(code).value, });
highlight.js是支持多種代碼配色風(fēng)格的,可以在css文件中進(jìn)行切換:
@import "~highlight.js/styles/atom-one-dark.css";
在這可以看到每種語(yǔ)言的高亮效果和配色風(fēng)格:https://highlightjs.org/
React state 和 props 是什么可以看之前的一篇文章:https://github.com/axuebin/react-blog/issues/8
關(guān)于React組件的生命周期可以看之前的一篇文章:https://github.com/axuebin/react-blog/issues/9
前端路由項(xiàng)目中前端路由用的是 React-Router V4。
官方文檔:https://reacttraining.com/react-router/web/guides/quick-start
中文文檔:http://reacttraining.cn/
基本使用Blog
注意:一定要在根目錄的 Route 中聲明 exact,要不然點(diǎn)擊任何鏈接都無(wú)法跳轉(zhuǎn)。
2級(jí)目錄跳轉(zhuǎn)比如我現(xiàn)在要在博客頁(yè)面上點(diǎn)擊跳轉(zhuǎn),此時(shí)的 url 是 localhost:8080/blog,需要變成 localhost:8080/blog/article,可以這樣做:
這樣就可以跳轉(zhuǎn)到 localhost:8080/blog/article 了,而且還傳遞了一個(gè) number 參數(shù),在 article 中可以通過(guò) this.props.params.number獲取。
HashRouter當(dāng)我把項(xiàng)目托管到 Github Page 后,出現(xiàn)了這樣一個(gè)問(wèn)題。
刷新頁(yè)面出現(xiàn) Cannot GET / 提示,路由未生效。
通過(guò)了解,知道了原因是這樣,并且可以解決:
由于刷新之后,會(huì)根據(jù)URL對(duì)服務(wù)器發(fā)送請(qǐng)求,而不是處理路由,導(dǎo)致出現(xiàn) Cannot GET / 錯(cuò)誤。
通過(guò)修改
當(dāng)前一個(gè)頁(yè)面滾動(dòng)到一定區(qū)域后,點(diǎn)擊跳轉(zhuǎn)后,頁(yè)面雖然跳轉(zhuǎn)了,但是會(huì)停留在滾動(dòng)的區(qū)域,不會(huì)自動(dòng)回到頁(yè)面頂部。
可以通過(guò)這樣來(lái)解決:
componentDidMount() { this.node.scrollIntoView(); } render() { return (狀態(tài)管理this.node = node} >); }
項(xiàng)目中多次需要用到從 Github Issues 請(qǐng)求來(lái)的數(shù)據(jù),因?yàn)橹熬椭?Redux 這個(gè)東西的存在,雖然有點(diǎn)大材小用,為了學(xué)習(xí)還是將它用于項(xiàng)目的狀態(tài)管理,只需要請(qǐng)求一次數(shù)據(jù)即可。
官方文檔:http://redux.js.org/
中文文檔:http://cn.redux.js.org/
簡(jiǎn)單的來(lái)說(shuō),每一次的修改狀態(tài)都需要觸發(fā) action ,然而其實(shí)項(xiàng)目中我現(xiàn)在還沒(méi)用到修改數(shù)據(jù)2333。。。
關(guān)于狀態(tài)管理這一塊,由于還不是太了解,就不誤人子弟了~
主要組件React是基于組件構(gòu)建的,所以在搭建頁(yè)面的開(kāi)始,我們要先考慮一下我們需要一些什么樣的組件,這些組件之間有什么關(guān)系,哪些組件是可以復(fù)用的等等等。
首頁(yè)可以看到,我主要將首頁(yè)分成了四個(gè)部分:
header:網(wǎng)站標(biāo)題,副標(biāo)題,導(dǎo)航欄
banner:about me ~,準(zhǔn)備用自己的照片換個(gè)背景,但是還沒(méi)有合適的照片
card area:暫時(shí)是三個(gè)卡片
blog card:最近的幾篇博文
demo card:幾個(gè)小demo類(lèi)別
me card:算是我放飛自我的地方吧
footer:版權(quán)信息、備案信息、瀏覽量
博客頁(yè)博客頁(yè)就是很中規(guī)中矩的一個(gè)頁(yè)面吧,這部分是整個(gè)項(xiàng)目中代碼量最多的部分,包括以下幾部分:
文章列表組件
翻頁(yè)組件
歸檔按鈕組件
類(lèi)別組件
標(biāo)簽組件
文章列表文章列表其實(shí)就是一個(gè) list,里面有一個(gè)個(gè)的 item:
文章1文章2對(duì)于每一個(gè) item,其實(shí)是這樣的:
一個(gè)文章item組件它可能需要包括:
文章標(biāo)題
文章發(fā)布的時(shí)間、類(lèi)別、標(biāo)簽等
文章摘要
...
如果用 DOM 來(lái)描述,它應(yīng)該是這樣的:
文章標(biāo)題時(shí)間類(lèi)別標(biāo)簽摘要所以,我們可以有很多個(gè)組件:
文章列表組件
文章item組件
類(lèi)別標(biāo)簽組件
它們可能是這樣一個(gè)關(guān)系:
分頁(yè)對(duì)于分頁(yè)功能,傳統(tǒng)的實(shí)現(xiàn)方法是在后端完成分頁(yè)然后分批返回到前端的,比如可能會(huì)返回一段這樣的數(shù)據(jù):
{ total:500, page:1, data:[] }也就是后端會(huì)返回分好頁(yè)的數(shù)據(jù),含有表示總數(shù)據(jù)量的total、當(dāng)前頁(yè)數(shù)的page,以及屬于該頁(yè)的數(shù)據(jù)data。
然而,我這個(gè)頁(yè)面只是個(gè)靜態(tài)頁(yè)面,數(shù)據(jù)是放在Github Issues上的通過(guò)API獲取的。(Github Issues的分頁(yè)貌似不能自定義數(shù)量...),所以沒(méi)法直接返回分好的數(shù)據(jù),所以只能在前端強(qiáng)行分頁(yè)~
分頁(yè)功能這一塊我偷懶了...用的是 antd 的翻頁(yè)組件
。 官方文檔:https://ant.design/components/pagination-cn/
文檔很清晰,使用起來(lái)也特別簡(jiǎn)單。
前端渲染的邏輯(有點(diǎn)蠢):將數(shù)據(jù)存放到一個(gè)數(shù)組中,根據(jù)當(dāng)前頁(yè)數(shù)和每頁(yè)顯示條數(shù)來(lái)計(jì)算該顯示的索引值,取出相應(yīng)的數(shù)據(jù)即可。
翻頁(yè)組件中:
constructor() { super(); this.onChangePage = this.onChangePage.bind(this); } onChangePage(pageNumber) { this.props.handlePageChange(pageNumber); } render() { return (); }當(dāng)頁(yè)數(shù)發(fā)生改變后,會(huì)觸發(fā)從父組件傳進(jìn)
的方法 handlePageChange,從而將頁(yè)數(shù)傳遞到父組件中,然后傳遞到 中。 父組件中:
handlePageChange(pageNumber) { this.setState({ currentPage: pageNumber }); } render() { return (); }列表中:
render() { const articlelist = []; const issues = this.props.issues; const currentPage = this.props.pageNumber; const defaultPageSize = this.props.defaultPageSize; const start = currentPage === 1 ? 0 : (currentPage - 1) * defaultPageSize; const end = start + defaultPageSize < issues.length ? start + defaultPageSize : issues.length; for (let i = start; i < end; i += 1) { const item = issues[i]; articlelist.push(label); } } 在 Github Issues 中,可以為一個(gè) issue 添加很多個(gè) label,我將這些對(duì)于博客內(nèi)容有用的 label 分為三類(lèi),分別用不同顏色來(lái)表示。
這里說(shuō)明一下, label 創(chuàng)建后會(huì)隨機(jī)生成一個(gè) id,雖然說(shuō) id 是不重復(fù)的,但是文章的類(lèi)別、標(biāo)簽會(huì)一直在增加,當(dāng)新加一個(gè) label 時(shí),程序中可能也要進(jìn)行對(duì)應(yīng)的修改,當(dāng)作區(qū)分 label 的標(biāo)準(zhǔn)可能就不太合適,所以我采用顏色來(lái)區(qū)分它們。
表示這是一篇文章的blog:只有有 blog 的 issue 才能顯示在頁(yè)面上,過(guò)濾 bug 、help 等
表示文章類(lèi)別的:用來(lái)表示文章的類(lèi)別,比如“前端”、“攝影”等
表示文章標(biāo)簽的:用來(lái)表示文章的標(biāo)簽,比如“JavaScript”、“React”等
即使有新的 label ,也只要根據(jù)顏色區(qū)分是屬于哪一類(lèi)就好了。
類(lèi)別
在這里的思路主要就是:遍歷所有 issues,然后再遍歷每個(gè) issue的 labels,找出屬于類(lèi)別的 label,然后計(jì)數(shù)。
const categoryList = []; const categoryHash = {}; for (let i = 0; i < issues.length; i += 1) { const labels = issues[i].labels; for (let j = 0; j < labels.length; j += 1) { if (labels[j].color === COLOR_LABEL_CATEGORY) { const category = labels[j].name; if (categoryHash[category] === undefined) { categoryHash[category] = true; const categoryTemp = { category, sum: 1 }; categoryList.push(categoryTemp); } else { for (let k = 0; k < categoryList.length; k += 1) { if (categoryList[k].category === category) { categoryList[k].sum += 1; } } } } } }這樣實(shí)現(xiàn)得要經(jīng)歷三次循環(huán),復(fù)雜度有點(diǎn)高,感覺(jué)有點(diǎn)蠢,有待改進(jìn),如果有更好的方法,請(qǐng)多多指教~
標(biāo)簽
這里的思路和類(lèi)別的思路基本一樣,只不過(guò)不同的顯示方式而已。
本來(lái)這里是想通過(guò)字體大小來(lái)體現(xiàn)每個(gè)標(biāo)簽的權(quán)重,后來(lái)覺(jué)得可能對(duì)于我來(lái)說(shuō),暫時(shí)只有那幾個(gè)標(biāo)簽會(huì)很頻繁,其它標(biāo)簽可能會(huì)很少,用字體大小來(lái)區(qū)分就沒(méi)有什么意義,還是改成排序的方式。
文章頁(yè)文章頁(yè)主要分為兩部分:
文章內(nèi)容區(qū)域:顯示文章內(nèi)容,顯示在頁(yè)面的主體區(qū)域
章節(jié)目錄:文章的章節(jié)目錄,顯示在文章的右側(cè)區(qū)域
文章內(nèi)容有兩種方式獲取文章具體內(nèi)容:
從之前已經(jīng)請(qǐng)求過(guò)的數(shù)組中去遍歷查找所需的文章內(nèi)容
通過(guò) issue number 重新發(fā)一次請(qǐng)求直接獲取內(nèi)容
最后我選擇了后者。
文章是用 markdown 語(yǔ)法寫(xiě)的,所以要先轉(zhuǎn)成 html 然后插入頁(yè)面中,這里用了一個(gè) React 不提倡的屬性:dangerouslySetInnerHTML。
除了渲染markdown,我們還得對(duì)文章中的代碼進(jìn)行高亮顯示,還有就是定制文章中不同標(biāo)簽的樣式。
章節(jié)目錄首先,這里有一個(gè) issue,希望大家可以給一些建議~
文章內(nèi)容是通過(guò) markdown 渲染后插入 dom 中的,由于 React 不建議通過(guò) document.getElementById 的形式獲取 dom 元素,所以只能想辦法通過(guò)字符串匹配的方式獲取文章的各個(gè)章節(jié)標(biāo)題。
由于我不太熟悉正則表達(dá)式,曾經(jīng)還在sf上咨詢過(guò),就采用了其中一個(gè)答案:
const issues = content; const menu = []; const patt = /(#+)s+?(.+)/g; let result = null; while ((result = patt.exec(issues))) { menu.push({ level: result[1].length, title: result[2] }); }這樣可以獲取到所有的 # 的字符串,也就是 markdown 中的標(biāo)題, result[1].length 表示有幾個(gè) #,其實(shí)就是幾級(jí)標(biāo)題的意思,title 就是標(biāo)題內(nèi)容了。
這里還有一個(gè)問(wèn)題,本來(lái)通過(guò) 的方式可以實(shí)現(xiàn)點(diǎn)擊跳轉(zhuǎn),但是現(xiàn)在渲染出來(lái)的 html 中對(duì)于每一個(gè)標(biāo)題沒(méi)有獨(dú)一無(wú)二的標(biāo)識(shí)。。。
歸檔頁(yè)按年份歸檔:
按類(lèi)別歸檔:
按標(biāo)簽歸檔:
問(wèn)題基本功能是已經(jīng)基本實(shí)現(xiàn)了,現(xiàn)在還存在著以下幾個(gè)問(wèn)題,也算是一個(gè) TodoList 吧
評(píng)論功能。擬利用 Github Issues API 實(shí)現(xiàn)評(píng)論,得實(shí)現(xiàn) Github 授權(quán)登錄
回到頂部。擬利用 antd 的組件,但是 state 中 visibility 一直是 false
首頁(yè)渲染?,F(xiàn)在打包完的js文件還是太大了,導(dǎo)致首頁(yè)渲染太慢,這個(gè)是接下來(lái)工作的重點(diǎn),也了解過(guò)關(guān)于這方面的優(yōu)化:
webpack 按需加載。這可能是目前最方便的方式
服務(wù)端渲染。這就麻煩了,但是好處也多,不僅解決渲染問(wèn)題,還有利于SEO,所以也是 todo 之一
代碼混亂,邏輯不對(duì)。這是我自己的問(wèn)題,需要再修煉。
原文地址:https://github.com/axuebin/react-blog/issues/17
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/88772.html
相關(guān)文章
手把手教你用vue搭建個(gè)人站
摘要:在我轉(zhuǎn)前端以來(lái),一直想要實(shí)現(xiàn)一個(gè)愿望自己搭建一個(gè)可以自動(dòng)解析文檔的個(gè)人站今天終于實(shí)現(xiàn)啦,先貼上我的地址確認(rèn)需求其實(shí)一個(gè)最簡(jiǎn)單的個(gè)人站,就是許多的頁(yè)面,你只要可以用寫(xiě)出來(lái)就可以,然后掛到上。 在我轉(zhuǎn)前端以來(lái),一直想要實(shí)現(xiàn)一個(gè)愿望: 自己搭建一個(gè)可以自動(dòng)解析Markdown文檔的個(gè)人站 今天終于實(shí)現(xiàn)啦,先貼上我的blog地址 確認(rèn)需求 其實(shí)一個(gè)最簡(jiǎn)單的個(gè)人站,就是許多的HTML頁(yè)面,你只要...
2017-07-10 前端日?qǐng)?bào)
摘要:前端日?qǐng)?bào)精選入門(mén)指南入口,輸出,加載器和插件中數(shù)據(jù)類(lèi)型轉(zhuǎn)換讓我印象深刻的面試題大話大前端時(shí)代一與的組件化庖丁解牛一發(fā)布中文第期手把手教你用管理狀態(tài)上個(gè)快速編程技巧眾成翻譯中執(zhí)行順序組件解耦之道眾成翻譯組件模型啟示錄有個(gè)梨作 2017-07-10 前端日?qǐng)?bào) 精選 Webpack入門(mén)指南: 入口,輸出,加載器和插件JavaScript中數(shù)據(jù)類(lèi)型轉(zhuǎn)換讓我印象深刻的javascript面試題大...
手把手教你用 JavaScript 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的國(guó)際象棋 AI
摘要:實(shí)現(xiàn)這一功能最簡(jiǎn)單的方法是計(jì)算棋盤(pán)上棋子的相對(duì)強(qiáng)度大小,用下面的對(duì)照表。本鏈接是基于算法優(yōu)化的國(guó)際象棋。我們來(lái)稍微調(diào)整一下棋盤(pán)上棋子狀態(tài)的權(quán)重,這一圖表是在國(guó)際象棋程序維基百科中給出的。 showImg(https://segmentfault.com/img/remote/1460000009143081?w=2000&h=1317); 本文作者: Lauri Hartikka 編...
手把手教你用 JavaScript 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的國(guó)際象棋 AI
摘要:實(shí)現(xiàn)這一功能最簡(jiǎn)單的方法是計(jì)算棋盤(pán)上棋子的相對(duì)強(qiáng)度大小,用下面的對(duì)照表。本鏈接是基于算法優(yōu)化的國(guó)際象棋。我們來(lái)稍微調(diào)整一下棋盤(pán)上棋子狀態(tài)的權(quán)重,這一圖表是在國(guó)際象棋程序維基百科中給出的。 showImg(https://segmentfault.com/img/remote/1460000009143081?w=2000&h=1317); 本文作者: Lauri Hartikka 編...
手把手教你用es6+vue2+webpack2+vue-router2搭建個(gè)人blog
摘要:更新日志更新完成靜態(tài)頁(yè)面原型修復(fù)使用的正確姿勢(shì)更新添加靜態(tài)頁(yè)面更新添加使用方法請(qǐng)戳我主要作用就是在你開(kāi)發(fā)環(huán)節(jié)在后端同學(xué)還未開(kāi)發(fā)完成的情況下,提供一個(gè)。 底下評(píng)論說(shuō)是標(biāo)題黨,或者是光扔個(gè)github地址上來(lái)的同學(xué)我就不說(shuō)什么了。你們有看看倉(cāng)庫(kù)的提交記錄么?我還沒(méi)有吃撐到開(kāi)個(gè)倉(cāng)庫(kù)去騙star.我的出發(fā)點(diǎn)就是每天更新一部分代碼,教大家用我所提到的技術(shù)棧搭建一個(gè)blog,我的出發(fā)點(diǎn)就是這么簡(jiǎn)單...
發(fā)表評(píng)論
0條評(píng)論
閱讀 2704·2021-11-22 15:24
閱讀 1441·2021-11-17 09:38
閱讀 2830·2021-10-09 09:57
閱讀 1267·2019-08-30 15:44
閱讀 2507·2019-08-30 14:00
閱讀 3617·2019-08-30 11:26
閱讀 2996·2019-08-29 16:28
閱讀 836·2019-08-29 13:56