基于Cloud?Studio構(gòu)建React完成點(diǎn)餐H5頁(yè)面(騰訊云?Cloud?Studio?實(shí)戰(zhàn)訓(xùn)練營(yíng))
前言
- 最近也是有機(jī)會(huì)參與到了騰訊云舉辦的
騰訊云 Cloud Studio 實(shí)戰(zhàn)訓(xùn)練營(yíng)
,借此了解了騰訊云 Cloud Studio
產(chǎn)品。 - 騰訊云 Cloud Studio 的出現(xiàn)是有一定創(chuàng)新性的,使用它進(jìn)行開(kāi)發(fā)免去了使用一些傳統(tǒng)開(kāi)發(fā)工具的成本。
- 如下載一個(gè)開(kāi)發(fā)工具就要進(jìn)行基本的開(kāi)發(fā)環(huán)境配置,以及下載、安裝和占用本地存儲(chǔ)等等成本。
- 下面就來(lái)使用
騰訊云 Cloud Studio
做一個(gè)實(shí)戰(zhàn)案例來(lái)深入了解該產(chǎn)品的優(yōu)越性吧!
【騰訊云 Cloud Studio 實(shí)戰(zhàn)訓(xùn)練營(yíng)】基于Cloud Studio 構(gòu)建React完成點(diǎn)餐H5頁(yè)面
一、Cloud Studio介紹
1.1 Cloud Studio 是什么
Cloud Studio
是 基于瀏覽器的集成式開(kāi)發(fā)環(huán)境(IDE),為開(kāi)發(fā)者提供了一個(gè)永不間斷的云端工作站。用戶在使用 Cloud Studio 時(shí)無(wú)需安裝,隨時(shí)隨地打開(kāi)瀏覽器就能在線編程。
Cloud Studio 作為 在線 IDE,包含 代碼高亮、自動(dòng)補(bǔ)全、Git 集成、終端等 IDE 的基礎(chǔ)功能,同時(shí)支持實(shí)時(shí)調(diào)試、插件擴(kuò)展等,可以幫助開(kāi)發(fā)者快速完成各種應(yīng)用的開(kāi)發(fā)、編譯與部署工作。
此外,Cloud Studio還支持與其他開(kāi)發(fā)者的協(xié)作,可以輕松地共享代碼和項(xiàng)目,并進(jìn)行實(shí)時(shí)的協(xié)同編輯。
目前Cloud Studio 團(tuán)隊(duì)基于老用戶使用體驗(yàn)角度和新用戶上手成本考慮,現(xiàn)實(shí)行每月贈(zèng)送 3000 分鐘的工作空間免費(fèi)時(shí)長(zhǎng),所以我們可以來(lái)使用送的時(shí)長(zhǎng)來(lái)認(rèn)真體驗(yàn)下吧!
1.2 相關(guān)鏈接
- Cloud Studio官網(wǎng)地址:https://www.cloudstudio.net/
- Cloud Studio文檔地址:https://cloudstudio.net/docs/
1.3 登錄注冊(cè)
(1)打開(kāi)Cloud Studio官網(wǎng),點(diǎn)擊注冊(cè):https://www.cloudstudio.net/
然后大家按自己的情況選擇一種賬號(hào)進(jìn)行注冊(cè)登錄就好。
注冊(cè)登錄后來(lái)到這個(gè)頁(yè)面就算正常啦,可以看到Cloud Studio提供了眾多開(kāi)發(fā)環(huán)境及模板,下面就來(lái)看看到底怎樣使用吧!
二、實(shí)戰(zhàn)練習(xí)
本文打算用云 IDE Cloud Studio 快速搭建,并開(kāi)發(fā)還原一個(gè)移動(dòng)端 React H5 的簡(jiǎn)版點(diǎn)餐系統(tǒng)頁(yè)面,從 0 到 1 體驗(yàn)云 IDE 給我們帶來(lái)的優(yōu)勢(shì),不需要裝各種環(huán)境,簡(jiǎn)單易用,開(kāi)箱即可上手。
2.1 初始化工作空間
來(lái)到 Cloud Studio 首頁(yè)之后,可以看到 Cloud Studio 提供了很多模板(框架模板、云原生模板、建站模板),都是預(yù)裝環(huán)境了,開(kāi)箱即用的模板,可以快速搭建環(huán)境進(jìn)行代碼開(kāi)發(fā),同時(shí) Cloud Studio 也對(duì)所有新老用戶每月贈(zèng)送 3000 分鐘的工作空間免費(fèi)時(shí)長(zhǎng)。
此時(shí)選擇創(chuàng)建一個(gè)React模板并等待云 IDE 初始化完畢。
即使從來(lái)沒(méi)有學(xué)習(xí)過(guò) React,只需要打開(kāi)對(duì)應(yīng)的 React 框架模板,即可開(kāi)始初始化一個(gè) React 的工作空間,在等待不到 10s 左右(與帶寬網(wǎng)速差異有區(qū)別),云 IDE 就已經(jīng)初始化完畢。
等待初始化完畢之后,在我們的右側(cè),可以看到一個(gè)實(shí)時(shí)預(yù)覽的預(yù)覽界面,然后在下面的控制臺(tái)輸入以下指令。
// 進(jìn)入當(dāng)前目錄 cd ./ && // 設(shè)置port的環(huán)境變量 set port=3000 && // 導(dǎo)出port的環(huán)境變量 export PORT=3000 && // 相當(dāng)于 yarn install,安裝相關(guān)依賴 yarn && // 啟動(dòng)開(kāi)發(fā)環(huán)境 yarn start --port=3000
這樣我們就完成一個(gè)對(duì) React 項(xiàng)目初始化的過(guò)程了,用一臺(tái)新主機(jī),只要有瀏覽器,就不需要準(zhǔn)備任何環(huán)境,不需要安裝任何軟件,只需要能夠聯(lián)網(wǎng),就能在幾分種內(nèi)初始化完成,這對(duì)新技術(shù)的學(xué)習(xí)是非常高效的。
2.2 開(kāi)發(fā)一個(gè)簡(jiǎn)版的點(diǎn)餐系統(tǒng)頁(yè)面
主旨是為了開(kāi)發(fā)一個(gè) React H5 的頁(yè)面,為了快速開(kāi)發(fā),通常會(huì)使用到UI組件庫(kù),這里我們使用的是 antd-mobile UI庫(kù),antd-mobile 是 Ant Design 的移動(dòng)規(guī)范的 React 實(shí)現(xiàn)。
1. 安裝 antd-mobile
antd-mobile 支持基于 Tree Shaking 的按需加載,大部分的構(gòu)建工具(例如 webpack 4+ 和 rollup)都支持 Tree Shaking,所以絕大多數(shù)情況下你無(wú)需做額外的配置即可擁有較小的包體積。
yarn add antd-mobile@^5.32.0 # 或者 npm install --save antd-mobile@^5.32.0
在終端輸入代碼進(jìn)行安裝即可。
安裝完成后在package.json中會(huì)有顯示。
2. 安裝 less 和 less-loader
平時(shí)我們?cè)谶M(jìn)行React項(xiàng)目開(kāi)發(fā)的時(shí),可能會(huì)使用到Less、Sass進(jìn)行樣式開(kāi)發(fā),默認(rèn) React 是集成Sass的,因此對(duì)于習(xí)慣書(shū)寫Less的小伙伴十分不友好,所以我們需要在React項(xiàng)目中配置Less。
yarn add -D less@^3.12.2 less-loader@^7.0.1
這里注意不帶版本安裝為高版本,項(xiàng)目會(huì)啟動(dòng)失敗,所以需要標(biāo)注好版本后進(jìn)行安裝。
這樣就安裝好了,繼續(xù)下一步。
3. 暴露 webpack 配置文件
在webpack.config.js中進(jìn)行配置,這樣進(jìn)行配置需要暴露出React的config配置文件,警告:該操作不可逆
npm run eject
輸入 ‘y’ 后,項(xiàng)目會(huì)自動(dòng)進(jìn)行解構(gòu)操作。
完成命令之后,項(xiàng)目根目錄會(huì)出現(xiàn)一個(gè)config文件夾,找到 config/webpack.config.js 文件,按Ctrl + F 查找關(guān)鍵字 “style files” 。
這塊是設(shè)置 css 相關(guān)的代碼。
將上圖的70行到73行代碼改成less,將以下代碼復(fù)制過(guò)去即可。
// style files regexes const cssRegex = /\.css$/; const cssModuleRegex = /\.module\.css$/; const sassRegex = /\.(scss|sass)$/; const sassModuleRegex = /\.module\.(scss|sass)$/; // 新增加 Less 代碼 const lessRegex = /\.(less)$/; const lessModuleRegex = /\.module\.(less)$/;
繼續(xù)在查找框中輸入 “sassRegex” 能夠找到以下代碼。
這里和前面配置一樣,仿照sass的配置,進(jìn)行l(wèi)ess的配置。
// less { test: lessRegex, // 有改動(dòng) exclude: lessModuleRegex, // 有改動(dòng) use: getStyleLoaders( { importLoaders: 3, sourceMap: isEnvProduction ? shouldUseSourceMap : isEnvDevelopment, }, 'less-loader' // 有改動(dòng) ), sideEffects: true, }, { test: lessModuleRegex, // 有改動(dòng) use: getStyleLoaders( { importLoaders: 3, sourceMap: isEnvProduction ? shouldUseSourceMap : isEnvDevelopment, modules: { getLocalIdent: getCSSModuleLocalIdent, }, }, 'less-loader' // 有改動(dòng) ), },
這樣就完成了webpack.config.js配置less,可以在項(xiàng)目中使用less樣式了。
4. 安裝 normalize
Normalize.css 是CSS重置的現(xiàn)代替代方案,可以為默認(rèn)的HTML元素樣式上提供了跨瀏覽器的高度一致性。相比于傳統(tǒng)的CSS reset,Normalize.css是一種現(xiàn)代的、為HTML5準(zhǔn)備的優(yōu)質(zhì)替代方案。
5. 上傳項(xiàng)目需要的素材
以前上傳服務(wù)器代碼,需要使用 Scp 命令或者裝 Remote SSH 插件支持,Cloud Studio 可以很方便默認(rèn)支持文件上傳與下載等常規(guī)的操作,與本地 IDE 體驗(yàn)一致:
- 可以直接拖動(dòng)文件到 IDE 編輯區(qū)域
- 右擊 IDE 編輯區(qū)域"上傳"
直接將 img 文件夾拖動(dòng)到src目錄下即可。
img下載方式:img
6. 替換App.js主文件
以下是點(diǎn)餐系統(tǒng)的主要業(yè)務(wù)代碼,復(fù)制到src/App.js直接替換即可。
import './App.css'; import React, { useState } from 'react' import { NavBar, Toast, Swiper, SideBar, TabBar, Badge } from 'antd-mobile' import { AppOutline, ExclamationShieldOutline, UnorderedListOutline, UserOutline, } from 'antd-mobile-icons' import BannerImg from './img/banner.png' import HotImg from './img/hot.png' import Food1Img from './img/food1.png' import Food2Img from './img/food2.png' import CartImg from './img/cart.png' import './index.less' import "normalize.css" function App() { const [activeKey, setActiveKey] = useState('1') const tabbars = [ { key: 'home', title: '點(diǎn)餐', icon: <AppOutline />, }, { key: 'todo', title: '購(gòu)物車', icon: <UnorderedListOutline />, badge: '5', }, { key: 'sale', title: '餐牌預(yù)告', icon: <ExclamationShieldOutline />, }, { key: '我的', title: '我的', icon: <UserOutline />, badge: Badge.dot, }, ] const back = () => Toast.show({ content: '歡迎進(jìn)入點(diǎn)餐系統(tǒng)', duration: 1000, }) const items = ['', '', '', ''].map((color, index) => ( <Swiper.Item key={index}> <img style={{ width: '100%' }} src={ BannerImg }></img> </Swiper.Item> )) const tabs = [ { key: '1', title: '熱銷' }, { key: '2', title: '套餐' }, { key: '3', title: '米飯' }, { key: '4', title: '燒菜' }, { key: '5', title: '湯' }, { key: '6', title: '主食' }, { key: '7', title: '飲料' }, ] const productName = [ '小炒黃牛肉', '芹菜肉絲炒香干', '番茄炒雞蛋', '雞湯', '酸菜魚(yú)', '水煮肉片', '土豆炒肉片', '孜然肉片', '宮保雞丁', '麻辣豆腐', '香椿炒雞蛋', '豆角炒肉' ] const productList = productName.map((item, key) => { return { name: item, img: key % 2 === 1 ? Food1Img : Food2Img } }) return ( <div className="App"> <NavBar onBack={back} style={{ background: '#F0F0F0', fontWeight: 'bold' }}>點(diǎn)餐</NavBar> <div className='head-card'> <Swiper style={{ '--border-radius': '8px', }} autoplay defaultIndex={1} > {items} </Swiper> </div> <div className='product-box'> <SideBar activeKey={activeKey} onChange={setActiveKey}> {tabs.map(item => ( <SideBar.Item key={item.key} title={ item.key === '1' ? <div> <div className='flex-center'> <img style={{ display: 'block', width: '16px', marginRight: '5px' }} src={ HotImg }></img> <div>{ item.title }</div> </div> </div> : item.title } /> ))} </SideBar> <div className='product-right'> <div className='product-title'>熱銷</div> <div className='product-list'> { productList.map((item, key) => { return ( <div className='product-item'> <div className='product-item-left'> <img style={{ display: 'block', width: '76px', marginRight: '5px' }} src={ item.img }></img> <div className='product-item-left-info'> <div> <div className='product-item-left-info-name'>{ item.name }</div> <div className='product-item-left-info-number'>月售{key + 1}0 贊{key * 5}</div> </div> <div className='product-item-left-info-price'>¥10</div> </div> </div> <div className="cart"> <img style={{ display: 'block', width: '30px', marginRight: '5px' }} src={ CartImg } onClick = { () => Toast.show({ content: '添加購(gòu)物車成功' }) }></img> </div> </div> ) }) } </div> </div> </div> <TabBar> {tabbars.map(item => ( <TabBar.Item key={item.key} icon={item.icon} title={item.title} badge={item.badge} /> ))} </TabBar> </div> ); } export default App;
然后在 src 目錄下,創(chuàng)建一個(gè) index.less 文件,將以下 less 相關(guān)的代碼復(fù)制到該文件中即可。
.head-card { padding: 10px 20px; box-sizing: border-box; } .flex-center { display: flex; align-items: center; } .product-box { display: flex; align-items: center; width: 100%; height: calc(100vh - 45px - 130px - 50px); } .product-right { flex: 1; height: 100%; } .product-title { font-family: PingFangSC-Regular; font-size: 14px; color: #000000; text-align: left; padding-bottom: 10px; } .product-list { height: calc(100% - 24px); overflow-y: auto; } .product-item { position: relative; width: 100%; display: flex; align-items: center; justify-content: space-between; padding-left: 10px; box-sizing: border-box; margin-bottom: 10px; &-left { display: flex; &-info { padding-left: 3px; box-sizing: border-box; display: flex; flex-direction: column; justify-content: space-between; &-name { font-family: PingFangSC-Regular; font-size: 14px; color: #000000; text-align: left; } &-number { padding-top: 3px; font-family: PingFangSC-Regular; font-size: 11px; color: #787878; text-align: left; } &-price { font-family: PingFangSC-Regular; font-size: 18px; color: #FF1800; text-align: left; } } } } .cart { position: absolute; right: 10px; bottom: 0; }
7.啟動(dòng)項(xiàng)目
完成上述操作后,在控制臺(tái)中輸入 yarn start
即可啟動(dòng)該項(xiàng)目。
Cloud Studio 內(nèi)置預(yù)覽插件,可以實(shí)時(shí)顯示網(wǎng)頁(yè)應(yīng)用,當(dāng)代碼發(fā)生改變之后,預(yù)覽窗口會(huì)自動(dòng)刷新,即可在 Cloud Studio 內(nèi)實(shí)時(shí)開(kāi)發(fā)調(diào)試網(wǎng)頁(yè)了
復(fù)制內(nèi)置 Chrome 瀏覽器窗口的地址欄,分享給團(tuán)隊(duì)的其它成員,免去了部署 nginx 的繁瑣配置。
這樣我們的項(xiàng)目就算完成了,只需要安裝幾個(gè)庫(kù)就可以快速的構(gòu)建一個(gè)項(xiàng)目。
三、發(fā)布到倉(cāng)庫(kù)
項(xiàng)目完成后可以快速發(fā)布到git倉(cāng)庫(kù)中,首先需要填寫README.md文件。
# 項(xiàng)目說(shuō)明 這是一個(gè)用 IDE [Cloud Studio](https://www.cloudstudio.net/?utm=csdn) 快速搭建,并開(kāi)發(fā)還原一個(gè)移動(dòng)端 React H5 的簡(jiǎn)版點(diǎn)餐系統(tǒng)頁(yè)面,從 0 到 1 體驗(yàn)云 IDE 給我們帶來(lái)的優(yōu)勢(shì),不需要裝各種環(huán)境,簡(jiǎn)單易用,開(kāi)箱即可上手。 ## 相關(guān)技術(shù)棧 React + less + webpack ## 項(xiàng)目運(yùn)行 yarn install yarn start
在左邊功能菜單區(qū)找到“源代碼管理”,使用 git init
進(jìn)行倉(cāng)庫(kù)初始化。
然后輸入需要提交的message信息,再點(diǎn)擊"Commit"進(jìn)行倉(cāng)庫(kù)提交。
如果提示沒(méi)有關(guān)聯(lián)賬號(hào)的話就去設(shè)置里面關(guān)聯(lián)一下即可。
如果登錄時(shí)使用的是coding,所以就直接推送到coding倉(cāng)庫(kù)了,當(dāng)然也可以推送到github,需要綁定對(duì)應(yīng)的賬號(hào)進(jìn)行提交即可。
這里可以登陸到 Coding 平臺(tái)進(jìn)行查看倉(cāng)庫(kù)代碼。
四、開(kāi)發(fā)空間管理
在我們的控制臺(tái)這里可以管理所有使用的工作空間,其中右側(cè)的按鈕可以進(jìn)行升級(jí)配置、設(shè)置、刪除、開(kāi)始\停止操作。
總結(jié)
在使用過(guò)Cloud Studio做一次實(shí)戰(zhàn)練習(xí)之后,讓我對(duì)Cloud Studio有了更深刻的認(rèn)識(shí),下面來(lái)簡(jiǎn)單談一下Cloud Studio的優(yōu)勢(shì)以及優(yōu)化建議。
Cloud Studio的優(yōu)勢(shì)很明顯,大致可以分為一下幾點(diǎn)。
- 節(jié)約開(kāi)發(fā)成本??梢詭椭脩魷p少安裝 IDE 的成本,提供在線代碼開(kāi)發(fā)、編譯、運(yùn)行、存儲(chǔ)的一站式服務(wù)。
- 便捷性。Cloud Studio 是基于瀏覽器的集成式開(kāi)發(fā)環(huán)境(IDE),為開(kāi)發(fā)者提供了一個(gè)永不間斷的云端工作站。用戶在使用 Cloud Studio 時(shí)無(wú)需安裝,隨時(shí)隨地打開(kāi)瀏覽器就能在線編程。
- 云端開(kāi)發(fā)。Cloud Studio 不需要任何本地安裝,只需使用支持的瀏覽器,即可輕松登錄并開(kāi)始編碼開(kāi)發(fā),實(shí)現(xiàn) Coding everywhere。同時(shí)加速開(kāi)發(fā)流程配置化,用配置定義云端開(kāi)發(fā)環(huán)境,提升開(kāi)發(fā)效率,擁有更彈性的云上開(kāi)發(fā)資源。
- 多種預(yù)制環(huán)境可選。內(nèi)置 Node.js、Java、Python 等常見(jiàn)環(huán)境,直接進(jìn)入開(kāi)發(fā)狀態(tài)。
- metawork 開(kāi)發(fā)協(xié)作。通過(guò)代碼協(xié)作,多光標(biāo)高亮顯示和跟隨,讓協(xié)作變的清晰有序。包括但不限于代碼協(xié)同、多光標(biāo)協(xié)作、實(shí)時(shí)預(yù)覽、終端協(xié)作。
- 眾多模板可用。在使用時(shí)一個(gè)很明顯的感受就是Cloud Studio提供了眾多的模板,有些功能我們可以從模板庫(kù)中直接拿出來(lái)改一下就可以滿足自己的需求快速使用,甚至于不會(huì)寫代碼的人都可以上去操作兩手。
Cloud Studio優(yōu)化建議
- 文檔全面詳細(xì)化。希望增加更多編程語(yǔ)言的文檔介紹,目前文檔里面只有幾個(gè)主流的編程語(yǔ)言操作文檔,對(duì)于一些剛開(kāi)始使用Cloud Studio的用戶來(lái)說(shuō),能夠看到自己平時(shí)使用的編程語(yǔ)言的詳細(xì)文檔可以更快的上手Cloud Studio。
- 提供更多的編程語(yǔ)言和框架。當(dāng)前網(wǎng)站支持的編程語(yǔ)言和框架不能夠滿足所有用戶的需求??梢钥紤]支持更多的編程語(yǔ)言和框架,提高平臺(tái)的適用性和可擴(kuò)展性。
- 提供更高的穩(wěn)定性。目前網(wǎng)站的性能和穩(wěn)定性還有進(jìn)一步提升的空間,有時(shí)候可能會(huì)出現(xiàn)一些卡頓和崩潰等問(wèn)題。為了提高用戶的使用體驗(yàn),建議考慮優(yōu)化平臺(tái)的性能和穩(wěn)定性。
到此這篇關(guān)于基于Cloud Studio構(gòu)建React完成點(diǎn)餐H5頁(yè)面(騰訊云 Cloud Studio 實(shí)戰(zhàn)訓(xùn)練營(yíng))的文章就介紹到這了,更多相關(guān)React點(diǎn)餐H5頁(yè)面內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一起來(lái)學(xué)習(xí)React元素的創(chuàng)建和渲染
這篇文章主要為大家詳細(xì)介紹了React元素的創(chuàng)建和渲染,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03react簡(jiǎn)單實(shí)現(xiàn)防抖和節(jié)流
在日常開(kāi)發(fā)中,我們經(jīng)常會(huì)有防抖和節(jié)流的需要,可以減小服務(wù)器端壓力,提升用戶體驗(yàn),本文就詳細(xì)的介紹了react簡(jiǎn)單實(shí)現(xiàn)防抖和節(jié)流,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05React中useEffect 與 useLayoutEffect的區(qū)別
本文主要介紹了React中useEffect與useLayoutEffect的區(qū)別,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-07-07解決React報(bào)錯(cuò)Property does not exist on 
這篇文章主要為大家介紹了React報(bào)錯(cuò)Property does not exist on type 'JSX.IntrinsicElements'解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12react中的watch監(jiān)視屬性-useEffect介紹
這篇文章主要介紹了react中的watch監(jiān)視屬性-useEffect使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09React語(yǔ)法中設(shè)置TS校驗(yàn)規(guī)則的步驟詳解
這篇文章主要給大家介紹了React語(yǔ)法中如何設(shè)置TS校驗(yàn)規(guī)則,文中有詳細(xì)的代碼示例供大家參考,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-10-10