react(一):特點-基本使用-JSX語法

初識React?

React是一個用于構建用戶界面的 JavaScript 庫,由 Facebook 開發和維護。

官網文檔:React 官方中文文檔

特點

1.聲明式編程

2.組件化開發

3.多平臺適配

開發依賴

開發React必須依賴三個庫:

1.react:包含react所必須的核心代碼

2.react-dom:react渲染在不同平臺所需要的核心代碼

3.babel:將jsx轉換成React代碼的工具

引入依賴的方式:

1.CDN引入

<!-- CDN引入 -->
<script src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

2.下載后,添加本地依賴

3.npm管理

案例-普通方式實現

注意:React18前后,渲染組件的書寫方式較為不同

React18之前:使用 ReactDOM.render() 方法來渲染組件

React18之后:使用 ReactDOM.createRoot() 方法來渲染組件

<body><div id="root"></div><!-- 1.引入依賴 --><script src="https://unpkg.com/react@18/umd/react.development.js"></script><script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script><script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script><!-- 編寫React代碼 --><script type="text/babel">// React18之前:ReactDOM.render()// ReactDOM.render(<h2>Hello World</h2>,document.getElementById('root'))// React18之后:createRootconst root = ReactDOM.createRoot(document.getElementById('root'))/* 要修改文本內容step1:將文本定義成變量*/let message = 'Hello World'//step2:監聽按鈕的點擊function btnClick() {// 2.1修改數據message = 'Hello React'// 2.2重新渲染界面rootRender()}rootRender()// step3.封裝一個渲染函數function rootRender( ){// 第一個()表示方法;第二個()表示它是一個整體root.render((<div><h1>{message}</h1><button onClick={btnClick}>修改文本</button></div>))}</script>
</body>

案例-組件化開發

可使用類的方式,將其封裝成一個組件

<body><div id="root"></div><script src="../lib/react.js"></script><script src="../lib/react-dom.js"></script><script src="../lib/babel.js"></script><script type="text/babel">// 使用組件重構代碼// 1.類組件-類名必須大寫!!// 2.函數式組件class App extends React.Component {// 組件數據constructor() {super()//this.state = {定義的數據}this.state = {message:"Hello World"}}// 組件方法(實例方法)btnClick() {//該函數默認this指向為undefined——改變其this指向// 內部完成兩件事:1.將state中的值修改掉  2.自動重新執行render函數this.setState({message:"Hello React"})}// render中返回的jsx內容即root根節點渲染內容render() {// console.log("render",this);//此處this-App組件實例return (<div><h2>{this.state.message}</h2><button onClick={this.btnClick.bind(this)}>修改文本</button></div>)}}// 將組件渲染到界面上const root = ReactDOM.createRoot(document.getElementById('root'))root.render(<App />)</script>
</body>

JSX語法解析

jsx書寫規范

render(){const {message} = this.state/* 書寫規范:1.JSX結構中只有一個根元素2.JSX結構通常包裹一個()—— 將整個jsx當成一個整體,實現換行、3.jsx可以是單標簽,也可以是雙標簽,但是單標簽必須以/>結尾*/return (<div><h1>{ message }</h1><br/></div>)
}

jsx注釋寫法

render(){const {message} = this.statereturn (<div>{/* jsx注釋寫法 */}<h1>{ message }</h1></div>)
}

jsx插入內容

<body><div id="root"></div><script src="../lib/react.js"></script><script src="../lib/react-dom.js"></script><script src="../lib/babel.js"></script><script type="text/babel">//1.創建rootconst root = ReactDOM.createRoot(document.getElementById('root'))//2..定義App根組件class App extends React.Component {constructor() {super()this.state = {message:"Hello World",names:[ 'Jack', 'Tom', 'Lucy' ],count:100,aaa:undefined,bbb:null,ccc:true,friend:{name:'lucy', age:22},firstNmae:'張',lastName:'三',age:20,movies:["哪吒","唐探","三體"]}}render(){// 1.插入標識符const {message, names,count} = this.stateconst { aaa, bbb, ccc} = this.stateconst {friend} = this.state// 2.對內容進行運算后顯示(插入表達式)const {firstNmae, lastName} = this.stateconst fullName = firstNmae + "" + lastNameconst {age} = this.stateconst ageStr = age > 18 ? '成年人' : '未成年人'const {movies} = this.stateconst items = movies.map(item => <li>{item}</li>)// 3.返回jsx的內容return (<div>{/* 1.Number/String/Array直接顯示處理 */}<h1>{ message }</h1><h2> {names} </h2><h2> {count} </h2>{/* 2.undefined/null/Boolean頁面什么都不顯示-取值為空 */}<h2>{aaa}</h2><h2>{bbb}</h2><h3>{ccc}</h3>{/* 3.Object類型不能作為子元素顯示 */}{/* <h2>{friend}</h2> */}<h2>{Object.keys(friend)}</h2>{/* 4.可插入對應的表達式 */}<h2>{ 10 + 20 }</h2><h2>{firstNmae + "" + lastName}</h2><h2>{fullName}</h2>{/* 5.插入三元運算符 */}<h2>{ageStr}</h2><h2>{age >=18 ? "成年" : "未成年"}</h2>{/* 可以調用方法獲取結果 */}<ul>{items}</ul><ul>{movies.map(item => <li>{item}</li>)}</ul><ul>{this.getMovies()}</ul></div>)}getMovies(){const liEls = this.state.movies.map(item => <li>{item}</li>)return liEls}}// 3.將App組件渲染到root上root.render(<App />)</script>
</body>

jsx綁定屬性

<body><div id="root"></div><script src="../lib/react.js"></script><script src="../lib/react-dom.js"></script><script src="../lib/babel.js"></script><script type="text/babel">//1.創建rootconst root = ReactDOM.createRoot(document.getElementById('root'))//2..定義App根組件class App extends React.Component {constructor() {super()this.state = {title:"學習第一天",imgURL:"https://p1.ssl.qhmsg.com/t0143b426aee3bb03cb.jpg",link:"htttp://www.baidu.com",isActive:true,objStyle:{color:"red", fontSize:"30px"}}}render(){const {title, imgURL,link,isActive,objStyle} = this.state// 需求:isActive為true時,添加active類名// 寫法一:const className = `abc cba ${isActive? "active" : ""}`// 寫法二:const classList = ["abc","cba"]if(isActive) {classList.push("active")}return (<div>{/* 1.基本屬性綁定 */}<h1 title={title}>我是h1元素</h1>{/* <img src={imgURL} alt=""/> */}<a href={link}>百度一下</a>{/* 2.綁定class屬性 */}<h2 className={className}>哈哈哈哈哈</h2><h2 className={classList.join(" ")}>哈哈哈哈哈</h2>{/* 3.綁定style屬性:綁定對象類型 */}<h2 style={{color:"red", fontSize:"30px"}}>11111</h2><h2 style= {objStyle}>888</h2></div>)}}// 3.將App組件渲染到root上root.render(<App />)</script>
</body>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897808.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897808.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897808.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Python+HTTP接口】POST請求不同請求頭構造

1、{‘Content-Type’: ‘application/json’} import requestsbody {"name1": "value1","name2": "value2"} requests.post(urlurl, databody)2、{“Content-Type”: “application/x-www-form-urlencoded; charsetUTF-8”} impor…

Java常用API:String與ArrayList的設計哲學與實踐應用

在Java編程中&#xff0c;API&#xff08;應用程序編程接口&#xff09;是開發者最強大的工具之一。它們封裝了復雜的底層邏輯&#xff0c;提供了簡潔的調用方式。本文將聚焦Java中兩個最常用的API——String和ArrayList&#xff0c;從底層原理到實際應用&#xff0c;結合深度思…

Python的字符串優雅優化策略:特定編碼 -> Unicode碼點 -> UTF-8(可自定義)

Python利用唯一uni-pot中介打理&#xff0c;任意制式輸出&#xff08;首選uyf-8&#xff09;。 筆記模板由python腳本于2025-03-14 23:37:04創建&#xff0c;本篇筆記適合喜歡探究字符串編碼細節的coder翻閱。 【學習的細節是歡悅的歷程】 博客的核心價值&#xff1a;在于輸出思…

linux 時間同步(阿里云ntp服務器)

1、安裝ntp服務 rootlocalhost ~]# yum -y install ntp 已加載插件&#xff1a;fastestmirror, langpacks Loading mirror speeds from cached hostfile* base: mirrors.nju.edu.cn* centos-sclo-rh: mirrors.nju.edu.cn* centos-sclo-sclo: mirrors.huaweicloud.com* epel: m…

虛擬化數據恢復—重裝系統服務器崩了的數據恢復過程

虛擬化數據恢復環境&故障&#xff1a; VMware虛擬化平臺 vmfs文件系統 工作人員誤操作重裝操作系統&#xff0c;服務器崩潰。 重裝系統會導致文件系統元文件被覆蓋。要恢復數據&#xff0c;必須找到&提取重裝系統前的文件系統殘留信息&#xff0c;通過提取出來的元文件…

微信開發者工具內建終端使用不了npm,但是cmd可以

下載cnpm并配置鏡像源 終端cmd&#xff1a; npm install -g cnpm --registryhttp://registry.npmmirror.com 打開微信開發者工具&#xff0c;找到方框的文件右擊選擇內建終端打開 初始化&#xff1a; npm init -y 發現npm沒有此命令 關閉微信開發工具&#xff0c;用管理…

vue/react/vite前端項目打包的時候加上時間最簡單版本,防止后端扯皮

如果你是vite項目&#xff0c;直接寫一個vite的插件&#xff0c;通過這個插件可以動態注入環境變量&#xff0c;然后當打包的時候&#xff0c;自動注入這個時間到環境變量中&#xff0c;然后在項目中App.vue中或者Main.tsx中打印出來&#xff0c;這就知道是什么時候編譯的項目了…

element-plus中Autocomplete自動補全輸入框組件的使用

目錄 1.基本使用 ①從官網賦值如下代碼 ②查看運行效果 ③代碼解讀 2.調用后端接口&#xff0c;動態獲取建議數據 結語 1.基本使用 ①從官網賦值如下代碼 <template> <div><!-- 自動補全輸入框 --><el-autocompletev-model"state":fetc…

DeFi開發的深度解析與展望

去中心化金融&#xff08;DeFi&#xff09;作為區塊鏈技術的一個重要應用&#xff0c;近年來在金融領域掀起了一股創新浪潮。它不僅為用戶提供了更加便捷、高效的金融服務&#xff0c;還重新定義了傳統金融的運作方式。本文將圍繞DeFi開發的核心要素、應用場景、面臨的問題以及…

思維鏈醫療編程方法論框架(Discuss V1版)

思維鏈醫療編程方法論框架 1. 方法論核心定義 思維鏈醫療編程方法論是一種結合結構化思維鏈(Chain of Thought)與醫療領域需求的系統化編程實踐框架,旨在通過分步邏輯推理、知識整合與動態反饋,提升醫療軟件/算法的開發效率、準確性與可解釋性。該方法論的關鍵在于通過清晰…

HarmonyOS第21天:解鎖分布式技術,開啟跨設備協同新體驗

一、HarmonyOS 分布式技術&#xff1a;開啟萬物互聯新時代 在物聯網蓬勃發展的今天&#xff0c;設備之間的互聯互通不再是遙不可及的夢想&#xff0c;而是真切融入日常生活的現實。從智能家居設備的聯動控制&#xff0c;到智能辦公場景中的高效協作&#xff0c;再到智能出行中的…

2025移動端軟件供應鏈安全開源治理方案最佳實踐

2025年3月13日&#xff0c;由中國軟件評測中心、CAPPVD漏洞庫聯合主辦的“第六期移動互聯網APP產品安全漏洞技術沙龍”在海口成功召開。懸鏡安全基于移動端數字供應鏈安全開源治理方案榮獲中國軟件評測中心“2024移動互聯網APP產品安全漏洞治理”優秀案例&#xff0c;并獲頒證書…

【Go學習】04-1-Gin框架-路由請求響應參數

【Go學習】04-1-Gin框架 初識框架go流行的web框架GinirisBeegofiber Gin介紹Gin快速入門 路由RESTful API規范請求方法URI靜態url路徑參數模糊匹配 處理函數分組路由 請求參數GET請求參數普通參數數組參數map參數 POST請求參數表單參數JSON參數 路徑參數文件參數 響應字符串方式…

哈爾濱算力服務器托管推薦-青蛙云

哈爾濱年平均氣溫3.5攝氏度&#xff0c;有發展云計算和算力數據中心的天然優勢 &#xff0c;今天為哈爾濱算力服務器托管服務商&#xff1a;青蛙云&#xff0c;黑龍江經營17年的老牌IDC服務商。 先來了解下算力服務器&#xff1a; 算力服務器&#xff0c;尤其是那些用于運行人…

【C++】每日一練(有效的括號)

本篇博客給大家帶來的是用C語言來解答有效的括號&#xff01; &#x1f41f;&#x1f41f;文章專欄&#xff1a;每日一練 &#x1f680;&#x1f680;若有問題評論區下討論&#xff0c;我會及時回答 ??歡迎大家點贊、收藏、分享&#xff01; 今日思想&#xff1a;不服輸的少年…

Embedding模型到底是什么?

嵌入模型&#xff08;Embedding Model&#xff09;是一種將高維數據映射到低維空間的工具&#xff0c;廣泛應用于自然語言處理&#xff08;NLP&#xff09;、推薦系統和圖像識別等領域。它的核心目標是將復雜的數據&#xff08;如文本、圖像或用戶行為&#xff09;轉換為稠密的…

Centos離線安裝perl

文章目錄 Centos離線安裝perl1. perl是什么&#xff1f;2. Centos下載地址&#xff1f;3. perl的安裝4. 安裝結果驗證 Centos離線安裝perl 1. perl是什么&#xff1f; Perl 是一種 高級腳本語言&#xff0c;誕生于 1987 年&#xff0c;以強大的 文本處理能力 和靈活性著稱&…

快速學習Bootstrap前端框架

什么是 Bootstrap? Bootstrap 是一個開源的前端框架,用于快速開發響應式(Responsive)和美觀的網頁。它包含: ? HTML 組件(導航欄、按鈕、表單等) ? CSS 樣式(網格系統、排版、顏色等) ? JavaScript 交互(模態框、輪播圖、工具提示等) 官網:Bootstrap The mo…

51單片機的keil c51軟件安裝教程

Keil&#xff08;C51&#xff09;介紹、下載、安裝與注冊_keil c51-CSDN博客 參考 安裝 不一定是這個大小&#xff0c;也可以下載別的版本KEID C51 注冊 加入芯片型號 …

DeepIn Wps 字體缺失問題

系統缺失字體 Symbol 、Wingdings 、Wingdings2、Wingdings3、MT—extra 字體問題 問了下DeepSeek 在應用商店安裝或者在windows 里面找 裝了一個GB-18030 還是不行 在windows里面復制了缺失的字體 將字體復制到DeepIn 的字體目錄&#xff08;Ubuntu 應該也是這個目錄&am…