React18+TS通用后臺(tái)管理系統(tǒng)解決方案落地實(shí)戰(zhàn)示例
React 18+TS的根本概念
TypeScript
TypeScript
是一種靜態(tài)類型的編程言語(yǔ),它能夠在編譯時(shí)檢查代碼中的類型錯(cuò)誤,從而進(jìn)步代碼的可讀性和可維護(hù)性1。TypeScript
還支持ES6+
的新特性,如類,模塊,箭頭函數(shù),解構(gòu)賦值等,使得代碼愈加簡(jiǎn)約和現(xiàn)代化1。
TypeScript
能夠與React框架無(wú)縫集成,只需求裝置相應(yīng)的類型定義文件即可。例如,要運(yùn)用React 18+TS
開(kāi)發(fā)應(yīng)用,能夠執(zhí)行以下命令:
npm install --save react@next react-dom@next npm install --save-dev typescript @types/react @types/react-dom
這樣就能夠在.ts或.tsx
文件中運(yùn)用React和TypeScript
了。
React 18
React 18
是React
框架的最新版本,它包含了一些嚴(yán)重的更新和改良2。其中最引人矚目的是Server Components
,它能夠讓開(kāi)發(fā)者在效勞器端渲染組件,并將結(jié)果發(fā)送給客戶端3。這樣能夠減少客戶端的代碼量和網(wǎng)絡(luò)傳輸量,進(jìn)步應(yīng)用的加載速度和響應(yīng)速度3。
另一個(gè)重要的特性是Suspense
,它能夠讓開(kāi)發(fā)者在組件中聲明數(shù)據(jù)依賴,并在數(shù)據(jù)加載時(shí)顯現(xiàn)一個(gè)占位符4。這樣能夠防止組件在渲染過(guò)程中呈現(xiàn)閃爍或空白的狀況,進(jìn)步用戶體驗(yàn)4。
還有一個(gè)值得關(guān)注的特性是Concurrent Rendering
,它能夠讓React
在后臺(tái)渲染更新,并在適宜的機(jī)遇顯現(xiàn)給用戶5。這樣能夠防止長(zhǎng)時(shí)間的渲染任務(wù)阻塞用戶交互,進(jìn)步應(yīng)用的流利度和穩(wěn)定性5。
要運(yùn)用React 18+TS
開(kāi)發(fā)應(yīng)用,需求配置一些實(shí)驗(yàn)性的特性。例如,在tsconfig.json
文件中添加以下內(nèi)容:
{ "compilerOptions": { "jsx": "react-jsx", "jsxImportSource": "react", "experimentalDecorators": true, "useDefineForClassFields": true } }
這樣就能夠在.tsx文件中運(yùn)用JSX語(yǔ)法,并啟用裝飾器和類字段等特性了。
React 18+TS的優(yōu)勢(shì)
運(yùn)用React 18+TS
開(kāi)發(fā)前端應(yīng)用有以下幾個(gè)優(yōu)勢(shì):
能夠應(yīng)用TypeScript
的類型系統(tǒng)和ES6+的新特性,編寫愈加強(qiáng)健、簡(jiǎn)約和現(xiàn)代化的代碼。
能夠應(yīng)用React 18
的新特性,如Server Components, Suspense, Concurrent Rendering
等,進(jìn)步應(yīng)用的性能和用戶體驗(yàn)。
能夠享用React
生態(tài)系統(tǒng)中豐厚的資源和工具,如 Create React App, Next.js, React Router, Redux, Material UI
等,快速搭建和部署應(yīng)用。
React 18+TS在線教育平臺(tái)示例
為了展現(xiàn)如何運(yùn)用React 18+TS構(gòu)建一個(gè)在線教育平臺(tái),簡(jiǎn)單完成一個(gè)前端頁(yè)面,顯現(xiàn)課程列表和課程詳情。
首先,我們需求創(chuàng)立一個(gè)React 18+TS
項(xiàng)目,能夠運(yùn)用Create React App
工具,執(zhí)行以下命令:
npx create-react-app react18-ts-edu --template typescript cd react18-ts-edu npm start
這樣就能夠在閱讀器中看到一個(gè)默許的頁(yè)面了。
接下來(lái),我們需求裝置一些依賴庫(kù),如GraphQL, Apollo Client, Material UI
等,執(zhí)行以下命令:
npm install graphql @apollo/client @material-ui/core @material-ui/icons
然后,我們需求配置Apollo Client
,用于與后端的GraphQL接口通訊。在src目錄下創(chuàng)立一個(gè)apollo.ts
文件,添加以下內(nèi)容:
import { ApolloClient, InMemoryCache } from "@apollo/client"; // 創(chuàng)立一個(gè)Apollo Client實(shí)例 const client = new ApolloClient({ // 指定后端的GraphQL接口地址 uri: "http://localhost:3000/graphql", // 創(chuàng)立一個(gè)內(nèi)存緩存對(duì)象 cache: new InMemoryCache(), }); // 導(dǎo)出client對(duì)象 export default client;
接著,我們需求修正src/index.tsx
文件,運(yùn)用ApolloProvider
組件包裹App組件,將client
對(duì)象傳送給子組件。修正后的文件內(nèi)容如下:
import React from "react"; import ReactDOM from "react-dom"; import { ApolloProvider } from "@apollo/client"; import client from "./apollo"; import App from "./App"; import "./index.css"; ReactDOM.render( <React.StrictMode> // 運(yùn)用ApolloProvider組件包裹App組件 , document.getElementById("root") );
接下來(lái),我們需求創(chuàng)立一個(gè)CourseList
組件,用于顯現(xiàn)課程列表。在src目錄下創(chuàng)立一個(gè)components
文件夾,并在其中創(chuàng)立一個(gè)CourseList.tsx
文件,添加以下內(nèi)容:
import React, { useState } from "react"; import { useQuery, gql } from "@apollo/client"; import { Grid, Card, CardActionArea, CardMedia, CardContent, Typography, CardActions, Button, } from "@material-ui/core"; // 定義一個(gè)GraphQL查詢語(yǔ)句,用于獲取課程列表 const COURSES_QUERY = gql` query { courses { id title cover price rating } } `; // 定義一個(gè)課程類型的接口,用于描繪課程的屬性 interface Course { id: string; title: string; cover: string; price: number; rating: number; } // 定義一個(gè)CourseList組件的函數(shù),接納一個(gè)onSelect屬性,用于傳送選中的課程ID const CourseList: React.FC<{ onSelect: (id: string) => void }> = ({ onSelect, }) => { // 運(yùn)用useQuery鉤子函數(shù),傳入查詢語(yǔ)句,獲取查詢結(jié)果 const { loading, error, data } = useQuery(COURSES_QUERY); // 假如查詢正在加載中,返回一個(gè)提示信息 if (loading) return Loading... ; // 假如查詢出錯(cuò)了,返回一個(gè)錯(cuò)誤信息 if (error) return Error :( ; // 假如查詢勝利了,返回一個(gè)網(wǎng)格規(guī)劃的課程列表 return ( {data.courses.map((course: Course) => ( <CardActionArea onClick={() => onSelect(course.id)}> <CardMedia component="img" alt={course.title} height="140" image={course.cover} title={course.title} /> {course.title} {`價(jià)錢:${course.price}元`} {`評(píng)分:${course.rating}`} </CardContent
以上就是React18+TS通用后臺(tái)管理系統(tǒng)解決方案落地實(shí)戰(zhàn)示例的詳細(xì)內(nèi)容,更多關(guān)于React18+TS后臺(tái)管理系統(tǒng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
React.InputHTMLAttributes實(shí)踐和注意事項(xiàng)
文章討論了如何在封裝組件中使用React.InputHTMLAttributes,以及如何通過(guò) {...inputProps} 動(dòng)態(tài)傳遞屬性,最后,文章總結(jié)了使用React.InputHTMLAttributes的最佳實(shí)踐和注意事項(xiàng),感興趣的朋友一起看看吧2024-11-11react項(xiàng)目如何運(yùn)行在微信公眾號(hào)
這篇文章主要介紹了react項(xiàng)目如何運(yùn)行在微信公眾號(hào),幫助大家更好的理解和學(xué)習(xí)使用react,感興趣的朋友可以了解下2021-04-04react?表單數(shù)據(jù)形式配置化設(shè)計(jì)
這篇文章主要介紹了react表單數(shù)據(jù)形式配置化設(shè)計(jì),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-07-07React Hook 父子組件相互調(diào)用函數(shù)方式
這篇文章主要介紹了React Hook 父子組件相互調(diào)用函數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09Remix?路由模塊輸出對(duì)象handle函數(shù)
這篇文章主要為大家介紹了Remix?路由模塊輸出對(duì)象handle函數(shù)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04React18的useEffect執(zhí)行兩次如何應(yīng)對(duì)
這篇文章主要給大家介紹了關(guān)于React18的useEffect執(zhí)行兩次如何應(yīng)對(duì)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用React具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07基于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)品,下面就來(lái)使用騰訊云Cloud?Studio做一個(gè)實(shí)戰(zhàn)案例來(lái)深入了解該產(chǎn)品的優(yōu)越性吧,感興趣的朋友跟隨小編一起看看吧2023-08-08