摘要:定義一個組件可以在其他組件中調(diào)用這個組件調(diào)用組件劉宇組件插入內(nèi)容在上面的案例中可以看到吧寫到當中,這種寫法稱為。
React初識
React是Facebook推出的一個javascript庫(用來創(chuàng)建用戶界面的Javascript庫),所以他只是和用戶的界面打交道,你可以把它看成MVC中的V(視圖)這一層。
組件React的一切都是基于組件的。web世界的構(gòu)成是基于各種HTML標簽的組合,這些標簽也叫語意化標簽每個標簽代表一個含義,在react,vue,angular中我們可以將這些標簽組合成一個輪播/導航...等,可以稱為自定義組件。
react中最重要的特性就是基于組件的設計流程。使用React你唯一需要關心的就是如何構(gòu)建組件(封裝性,復用性,測試),如下圖,每個塊都是一個組件,頁面由組件構(gòu)建而成,就像搭積木。
每個組件都有各自的狀態(tài),當狀態(tài)變更時,便會重新渲染整個組件。
定義一個組件
import React, { Component } from "react";、 import "./Comment.css"; class Comment extends Component { render() { return ({this.props.name} {this.props.children}); } } export default Comment;
可以在其他組件中調(diào)用這個組件
import React, { Component } from "react"; import Comment from "./Comment"; import "./App.css"; class App extends Component { render() { return (JSX{/**調(diào)用組件**/}); } } export default App;組件插入內(nèi)容
在上面的案例中可以看到react吧html寫到js當中,這種寫法稱為JSX。這是一種類似XML的寫法,他可以定義類似HTML一樣簡潔的樹狀結(jié)構(gòu)。這種語法結(jié)合了JavaScript語法和HTML的優(yōu)點,既可以像平常一樣使用HTML,也可以在里面前套JavaScript語法。這種有好的格式,讓開發(fā)者易于閱讀和開發(fā)。而且,對于組件來說,直接使用類似HTML的格式,也是非常嗨皮的。但是需要注意的是。JSX和HTML完全不是一回事,JSX只是作為編輯器,把類似HTML的結(jié)構(gòu)編譯成JavaScript。
JSX基本語法注意:在瀏覽器中不能直接使用這種格式,需要添加JSX編譯器來完成這項工作。
使用類XML語法的好處是標簽可以任意嵌套,我們可以像HTML一樣清晰地看到DOM樹狀結(jié)構(gòu)及其屬性。比如,我們構(gòu)建一個List組件
const List = () => (
寫這個組件的過程就像寫html一樣,只不過它被包裹在JavaScript的方法中,需要注意以下幾點。
元素類型定義標簽時,只允許被一個標簽包裹
標簽一定要閉合
在React中創(chuàng)建的虛擬元素可以分為兩類,DOM元素(DOM element)與組件元素(component element)
分別對應著原生DOM元素與自定義元素,而JSX與創(chuàng)建元素過程有這莫大的關聯(lián),在JSX中對應的規(guī)則是HTML標簽首字母是否為小寫字母,其中小寫首對應DOM元素,而組件元素自然對應大寫首字母
在HTML中,注釋語法是在jsx依舊使用的是js語法注釋,唯一要注意的是,在一個組件的子元素位置使用注釋要用{}包起來。
const List = () => (
元素除了標簽之外,另一個組成部分就是標簽的屬性。
在JSX中,不論是DOM元素還是組件元素,他門都有屬性。不同的是,DOM元素的屬性是標準規(guī)范屬性,但有兩個例外--class和for,這是因為在JavaScript中這兩個單詞都是關鍵詞。因此有對應的倆個轉(zhuǎn)化
class屬性改為className。
for屬性改為htmlFor。
在組件中元素的屬性是完全自定義的屬性,也可以理解為組件傳遞的參數(shù)。
組件插入內(nèi)容
在自定義組件中除了上面?zhèn)鬟f屬性的方法外也可以
const comment =組件插入內(nèi)容 ; comment.props.name = "劉宇";
也可以使用es6語法
const data = {name:"劉宇",age:10}; const comment =組件插入內(nèi)容 ;
自定義html屬性,上面說的是組件上的屬性,在JSX中往DOM元素中傳入自定義屬性,React是不會渲染的;
如果要使用HTML自定義屬性,要使用data-前綴,這與HTML標準也是一致的:
//不被渲染 //成功渲染HTML轉(zhuǎn)譯
React會將所有要顯示到DOM的字符串轉(zhuǎn)義,防止XSS。所以,如果jsx中含有轉(zhuǎn)義后的實體字符??梢允褂靡韵路椒?/p>
虛擬DOM(Virtual DOM)直接使用utf-8字符
使用對應的Unicode編碼查詢編碼;
使用數(shù)組組裝{["cc",?," 2017"]}
直接插入原始html
在傳統(tǒng)的web應用中每次更新頁面的時候都需要手動操作DOM來更新
事件-》執(zhí)行操作-》改變dom
DOM操作非常昂貴。在前端開發(fā)中,性能消耗最大的就是DOM操作,而且這部分的操作代碼不好維護。React把真實的DOM操作轉(zhuǎn)成JavaScript對象樹,也就是虛擬DOM;
這是普通的Html標簽寫法
React
這是在js中手動生成相同dom的寫法
//javascript dom var a = document.createElement("a") a.setAttribute("class", "link") a.setAttribute("href", "https://github.com/facebook/react") a.appendChild(document.createTextNode("React")) //這是一種封裝,沿用的React.createElement的命名 var a = React.createElement("a", { className: "link", href: "https://github.com/facebook/react" }, "React")
所有html結(jié)構(gòu),都可以用js dom來構(gòu)造,而且能將構(gòu)造的步驟封裝起來,做到「數(shù)據(jù)-dom結(jié)構(gòu)」的映射。
緩存初始數(shù)據(jù),新數(shù)據(jù)進來時,與舊數(shù)據(jù)對比,找到差異,根據(jù)差異本身的性質(zhì)進行dom操作;無差異,則不作為。
dom本身在js中就是一種數(shù)據(jù)結(jié)構(gòu)
console.dir(document.body)
在控制臺可以看到body的數(shù)據(jù)結(jié)構(gòu)。然而,dom相關的數(shù)據(jù)豐富而且復雜,我們其實只關心少數(shù)元素的少數(shù)屬性。
建立一個javascript plain object,非常輕量,用它保存我們真正關心的與dom相關的少數(shù)數(shù)據(jù);對它進行操作,然后對比操作前后的差異,再根據(jù)映射關系去操作真正的dom,無疑能提高性能。
相對于 DOM 對象,原生的 JavaScript 對象處理起來更快,而且更簡單。DOM 樹上的結(jié)構(gòu)、屬性信息我們都可以很容易地用 JavaScript 對象表示出來:
var element = { type: "ul", // 節(jié)點標簽名 props: { // DOM的屬性,用一個對象存儲鍵值對 id: "list" }, children: [ // 該節(jié)點的子節(jié)點 {type: "li", props: {className: "item"}, children: ["Item 1"]}, {type: "li", props: {className: "item"}, children: ["Item 2"]}, {type: "li", props: {className: "item"}, children: ["Item 3"]}, ] }
上面對應的HTML寫法是:
每次數(shù)據(jù)更新后,重新計算虛擬DOM,并和上一次的作比較,對發(fā)生改變的部分做批量更新。React也提供了生命周期方法減少了不必要的對比過程,以保證性能
下一篇:react開發(fā)教程(二)安裝
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/88246.html
摘要:使用快速構(gòu)建開發(fā)環(huán)境第一步安裝全局包是來自于,通過該命令我們無需配置就能快速構(gòu)建開發(fā)環(huán)境。執(zhí)行以下命令創(chuàng)建項目項目目錄在瀏覽器中打開,即可顯示上一篇開發(fā)教程初識下一篇開發(fā)教程三組件的構(gòu)建 react安裝 React可以直接下載使用,下載包中也提供了很多學習的實例。本教程使用了 React 的版本為 15.4.2,你可以在官網(wǎng) http://facebook.github.io/reac...
摘要:系列一初識系列二組件的和系列三組件的生命周期是推出的一個庫,它的口號就是用來創(chuàng)建用戶界面的庫,所以它只是和用戶界面打交道,可以把它看成中的視圖層。系列一初識系列二組件的和系列三組件的生命周期 React系列---React(一)初識ReactReact系列---React(二)組件的prop和stateReact系列---React(三)組件的生命周期 showImg(https://...
閱讀 3577·2021-11-23 10:13
閱讀 922·2021-09-22 16:01
閱讀 960·2021-09-09 09:33
閱讀 735·2021-08-05 09:58
閱讀 1776·2019-08-30 11:14
閱讀 2087·2019-08-30 11:02
閱讀 3329·2019-08-29 16:28
閱讀 1546·2019-08-29 16:09