基于Cloud?Studio構(gòu)建React完成點(diǎn)餐H5頁面(騰訊云?Cloud?Studio?實(shí)戰(zhàn)訓(xùn)練營)

前言
- 最近也是有機(jī)會參與到了騰訊云舉辦的
騰訊云 Cloud Studio 實(shí)戰(zhàn)訓(xùn)練營,借此了解了騰訊云 Cloud Studio產(chǎn)品。 - 騰訊云 Cloud Studio 的出現(xiàn)是有一定創(chuàng)新性的,使用它進(jìn)行開發(fā)免去了使用一些傳統(tǒng)開發(fā)工具的成本。
- 如下載一個(gè)開發(fā)工具就要進(jìn)行基本的開發(fā)環(huán)境配置,以及下載、安裝和占用本地存儲等等成本。
- 下面就來使用
騰訊云 Cloud Studio做一個(gè)實(shí)戰(zhàn)案例來深入了解該產(chǎn)品的優(yōu)越性吧!
【騰訊云 Cloud Studio 實(shí)戰(zhàn)訓(xùn)練營】基于Cloud Studio 構(gòu)建React完成點(diǎn)餐H5頁面
一、Cloud Studio介紹
1.1 Cloud Studio 是什么
Cloud Studio 是 基于瀏覽器的集成式開發(fā)環(huán)境(IDE),為開發(fā)者提供了一個(gè)永不間斷的云端工作站。用戶在使用 Cloud Studio 時(shí)無需安裝,隨時(shí)隨地打開瀏覽器就能在線編程。
Cloud Studio 作為 在線 IDE,包含 代碼高亮、自動(dòng)補(bǔ)全、Git 集成、終端等 IDE 的基礎(chǔ)功能,同時(shí)支持實(shí)時(shí)調(diào)試、插件擴(kuò)展等,可以幫助開發(fā)者快速完成各種應(yīng)用的開發(fā)、編譯與部署工作。
此外,Cloud Studio還支持與其他開發(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í)長,所以我們可以來使用送的時(shí)長來認(rèn)真體驗(yàn)下吧!
1.2 相關(guān)鏈接
- Cloud Studio官網(wǎng)地址:https://www.cloudstudio.net/
- Cloud Studio文檔地址:https://cloudstudio.net/docs/
1.3 登錄注冊
(1)打開Cloud Studio官網(wǎng),點(diǎn)擊注冊:https://www.cloudstudio.net/

然后大家按自己的情況選擇一種賬號進(jìn)行注冊登錄就好。

注冊登錄后來到這個(gè)頁面就算正常啦,可以看到Cloud Studio提供了眾多開發(fā)環(huán)境及模板,下面就來看看到底怎樣使用吧!

二、實(shí)戰(zhàn)練習(xí)
本文打算用云 IDE Cloud Studio 快速搭建,并開發(fā)還原一個(gè)移動(dòng)端 React H5 的簡版點(diǎn)餐系統(tǒng)頁面,從 0 到 1 體驗(yàn)云 IDE 給我們帶來的優(yōu)勢,不需要裝各種環(huán)境,簡單易用,開箱即可上手。
2.1 初始化工作空間
來到 Cloud Studio 首頁之后,可以看到 Cloud Studio 提供了很多模板(框架模板、云原生模板、建站模板),都是預(yù)裝環(huán)境了,開箱即用的模板,可以快速搭建環(huán)境進(jìn)行代碼開發(fā),同時(shí) Cloud Studio 也對所有新老用戶每月贈(zèng)送 3000 分鐘的工作空間免費(fèi)時(shí)長。
此時(shí)選擇創(chuàng)建一個(gè)React模板并等待云 IDE 初始化完畢。

即使從來沒有學(xué)習(xí)過 React,只需要打開對應(yīng)的 React 框架模板,即可開始初始化一個(gè) React 的工作空間,在等待不到 10s 左右(與帶寬網(wǎng)速差異有區(qū)別),云 IDE 就已經(jīng)初始化完畢。

等待初始化完畢之后,在我們的右側(cè),可以看到一個(gè)實(shí)時(shí)預(yù)覽的預(yù)覽界面,然后在下面的控制臺輸入以下指令。
// 進(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)開發(fā)環(huán)境 yarn start --port=3000
這樣我們就完成一個(gè)對 React 項(xiàng)目初始化的過程了,用一臺新主機(jī),只要有瀏覽器,就不需要準(zhǔn)備任何環(huán)境,不需要安裝任何軟件,只需要能夠聯(lián)網(wǎng),就能在幾分種內(nèi)初始化完成,這對新技術(shù)的學(xué)習(xí)是非常高效的。
2.2 開發(fā)一個(gè)簡版的點(diǎn)餐系統(tǒng)頁面
主旨是為了開發(fā)一個(gè) React H5 的頁面,為了快速開發(fā),通常會使用到UI組件庫,這里我們使用的是 antd-mobile UI庫,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ù)情況下你無需做額外的配置即可擁有較小的包體積。
yarn add antd-mobile@^5.32.0 # 或者 npm install --save antd-mobile@^5.32.0
在終端輸入代碼進(jìn)行安裝即可。

安裝完成后在package.json中會有顯示。

2. 安裝 less 和 less-loader
平時(shí)我們在進(jìn)行React項(xiàng)目開發(fā)的時(shí),可能會使用到Less、Sass進(jìn)行樣式開發(fā),默認(rèn) React 是集成Sass的,因此對于習(xí)慣書寫Less的小伙伴十分不友好,所以我們需要在React項(xiàng)目中配置Less。
yarn add -D less@^3.12.2 less-loader@^7.0.1
這里注意不帶版本安裝為高版本,項(xiàng)目會啟動(dòng)失敗,所以需要標(biāo)注好版本后進(jìn)行安裝。

這樣就安裝好了,繼續(xù)下一步。
3. 暴露 webpack 配置文件
在webpack.config.js中進(jìn)行配置,這樣進(jìn)行配置需要暴露出React的config配置文件,警告:該操作不可逆
npm run eject

輸入 ‘y’ 后,項(xiàng)目會自動(dòng)進(jìn)行解構(gòu)操作。
完成命令之后,項(xiàng)目根目錄會出現(xiàn)一個(gè)config文件夾,找到 config/webpack.config.js 文件,按Ctrl + F 查找關(guān)鍵字 “style files” 。
這塊是設(shè)置 css 相關(guān)的代碼。

將上圖的70行到73行代碼改成less,將以下代碼復(fù)制過去即可。
// 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: '購物車',
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 = [
'小炒黃牛肉',
'芹菜肉絲炒香干',
'番茄炒雞蛋',
'雞湯',
'酸菜魚',
'水煮肉片',
'土豆炒肉片',
'孜然肉片',
'宮保雞丁',
'麻辣豆腐',
'香椿炒雞蛋',
'豆角炒肉'
]
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: '添加購物車成功'
}) }></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)目
完成上述操作后,在控制臺中輸入 yarn start 即可啟動(dòng)該項(xiàng)目。

Cloud Studio 內(nèi)置預(yù)覽插件,可以實(shí)時(shí)顯示網(wǎng)頁應(yīng)用,當(dāng)代碼發(fā)生改變之后,預(yù)覽窗口會自動(dòng)刷新,即可在 Cloud Studio 內(nèi)實(shí)時(shí)開發(fā)調(diào)試網(wǎng)頁了
復(fù)制內(nèi)置 Chrome 瀏覽器窗口的地址欄,分享給團(tuán)隊(duì)的其它成員,免去了部署 nginx 的繁瑣配置。

這樣我們的項(xiàng)目就算完成了,只需要安裝幾個(gè)庫就可以快速的構(gòu)建一個(gè)項(xiàng)目。
三、發(fā)布到倉庫
項(xiàng)目完成后可以快速發(fā)布到git倉庫中,首先需要填寫README.md文件。
# 項(xiàng)目說明 這是一個(gè)用 IDE [Cloud Studio](https://www.cloudstudio.net/?utm=csdn) 快速搭建,并開發(fā)還原一個(gè)移動(dòng)端 React H5 的簡版點(diǎn)餐系統(tǒng)頁面,從 0 到 1 體驗(yàn)云 IDE 給我們帶來的優(yōu)勢,不需要裝各種環(huán)境,簡單易用,開箱即可上手。 ## 相關(guān)技術(shù)棧 React + less + webpack ## 項(xiàng)目運(yùn)行 yarn install yarn start
在左邊功能菜單區(qū)找到“源代碼管理”,使用 git init 進(jìn)行倉庫初始化。


然后輸入需要提交的message信息,再點(diǎn)擊"Commit"進(jìn)行倉庫提交。

如果提示沒有關(guān)聯(lián)賬號的話就去設(shè)置里面關(guān)聯(lián)一下即可。

如果登錄時(shí)使用的是coding,所以就直接推送到coding倉庫了,當(dāng)然也可以推送到github,需要綁定對應(yīng)的賬號進(jìn)行提交即可。
這里可以登陸到 Coding 平臺進(jìn)行查看倉庫代碼。

四、開發(fā)空間管理
在我們的控制臺這里可以管理所有使用的工作空間,其中右側(cè)的按鈕可以進(jìn)行升級配置、設(shè)置、刪除、開始\停止操作。

總結(jié)
在使用過Cloud Studio做一次實(shí)戰(zhàn)練習(xí)之后,讓我對Cloud Studio有了更深刻的認(rèn)識,下面來簡單談一下Cloud Studio的優(yōu)勢以及優(yōu)化建議。
Cloud Studio的優(yōu)勢很明顯,大致可以分為一下幾點(diǎn)。
- 節(jié)約開發(fā)成本??梢詭椭脩魷p少安裝 IDE 的成本,提供在線代碼開發(fā)、編譯、運(yùn)行、存儲的一站式服務(wù)。
- 便捷性。Cloud Studio 是基于瀏覽器的集成式開發(fā)環(huán)境(IDE),為開發(fā)者提供了一個(gè)永不間斷的云端工作站。用戶在使用 Cloud Studio 時(shí)無需安裝,隨時(shí)隨地打開瀏覽器就能在線編程。
- 云端開發(fā)。Cloud Studio 不需要任何本地安裝,只需使用支持的瀏覽器,即可輕松登錄并開始編碼開發(fā),實(shí)現(xiàn) Coding everywhere。同時(shí)加速開發(fā)流程配置化,用配置定義云端開發(fā)環(huán)境,提升開發(fā)效率,擁有更彈性的云上開發(fā)資源。
- 多種預(yù)制環(huán)境可選。內(nèi)置 Node.js、Java、Python 等常見環(huán)境,直接進(jìn)入開發(fā)狀態(tài)。
- metawork 開發(fā)協(xié)作。通過代碼協(xié)作,多光標(biāo)高亮顯示和跟隨,讓協(xié)作變的清晰有序。包括但不限于代碼協(xié)同、多光標(biāo)協(xié)作、實(shí)時(shí)預(yù)覽、終端協(xié)作。
- 眾多模板可用。在使用時(shí)一個(gè)很明顯的感受就是Cloud Studio提供了眾多的模板,有些功能我們可以從模板庫中直接拿出來改一下就可以滿足自己的需求快速使用,甚至于不會寫代碼的人都可以上去操作兩手。
Cloud Studio優(yōu)化建議
- 文檔全面詳細(xì)化。希望增加更多編程語言的文檔介紹,目前文檔里面只有幾個(gè)主流的編程語言操作文檔,對于一些剛開始使用Cloud Studio的用戶來說,能夠看到自己平時(shí)使用的編程語言的詳細(xì)文檔可以更快的上手Cloud Studio。
- 提供更多的編程語言和框架。當(dāng)前網(wǎng)站支持的編程語言和框架不能夠滿足所有用戶的需求。可以考慮支持更多的編程語言和框架,提高平臺的適用性和可擴(kuò)展性。
- 提供更高的穩(wěn)定性。目前網(wǎng)站的性能和穩(wěn)定性還有進(jìn)一步提升的空間,有時(shí)候可能會出現(xiàn)一些卡頓和崩潰等問題。為了提高用戶的使用體驗(yàn),建議考慮優(yōu)化平臺的性能和穩(wěn)定性。
到此這篇關(guān)于基于Cloud Studio構(gòu)建React完成點(diǎn)餐H5頁面(騰訊云 Cloud Studio 實(shí)戰(zhàn)訓(xùn)練營)的文章就介紹到這了,更多相關(guān)React點(diǎn)餐H5頁面內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一起來學(xué)習(xí)React元素的創(chuàng)建和渲染
這篇文章主要為大家詳細(xì)介紹了React元素的創(chuàng)建和渲染,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03
react簡單實(shí)現(xiàn)防抖和節(jié)流
在日常開發(fā)中,我們經(jīng)常會有防抖和節(jié)流的需要,可以減小服務(wù)器端壓力,提升用戶體驗(yàn),本文就詳細(xì)的介紹了react簡單實(shí)現(xiàn)防抖和節(jié)流,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
React中useEffect 與 useLayoutEffect的區(qū)別
本文主要介紹了React中useEffect與useLayoutEffect的區(qū)別,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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-12
react中的watch監(jiān)視屬性-useEffect介紹
這篇文章主要介紹了react中的watch監(jiān)視屬性-useEffect使用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
React語法中設(shè)置TS校驗(yàn)規(guī)則的步驟詳解
這篇文章主要給大家介紹了React語法中如何設(shè)置TS校驗(yàn)規(guī)則,文中有詳細(xì)的代碼示例供大家參考,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-10-10

