React-1

React 元素

  • 1.createElement 的返回值 element 可以代表一個(gè)div
  • 2.但element 并不是真正的div(DOM 對(duì)象)
  • 3.所以我們一般稱 element 為虛擬 DOM對(duì)象(代替div )

()=>React 元素

  • 1.返回 element 的函數(shù)瑰煎,也可以代表一個(gè)div
  • 2.這個(gè)函數(shù)可以多次執(zhí)行,每次得到最新的虛擬 div
  • 3.React 會(huì)對(duì)比兩個(gè)虛擬div,找出不同纤勒,局部更新視圖
    找不同的算法叫做 DOM Diff 算法




小結(jié)-1

React & ReactDOM

CDN方式:react.js. react-dom.js. babeljs
也可以直接 import React from 'react'

React.createElement

創(chuàng)建虛擬 DOM 對(duì)象
函數(shù)的作用:多次創(chuàng)建虛擬 DOM對(duì)象
DOM Diff是找不同的算法

JSX

XML轉(zhuǎn)譯為 React.createElement
朱躺,使用{}插入 JS代碼
create-react-app默認(rèn)將JS當(dāng)作 JSX 處理
條件判斷篷角、循環(huán)要用原生 JS實(shí)現(xiàn)







組件&&元素

默認(rèn)組件都會(huì)是大寫的

組件:將其他物件組合起來(lái)的物件就是組件
就目前而言 一個(gè)返回react元素的函數(shù)就是一個(gè)組件

React兩種組件

函數(shù)組件


類組件







PS:<welcome />注意你不是在寫標(biāo)簽

標(biāo)簽會(huì)被翻譯為 React.createElement
本質(zhì)上就是把XML語(yǔ)法轉(zhuǎn)換為JS

React.createElement語(yǔ)法邏輯



注意傳入一個(gè)類需要注意的格式

class Welcome extends React.Component{
constructor(){
super()
this.state = {n:0}
}
render(){
return<div>hi</div>
}
} 

添加props(外部數(shù)據(jù))
類組件可以直接讀取屬性 this.props.xx
函數(shù)組件直接讀取參數(shù)props.xxx
react會(huì)自動(dòng)把讀取的內(nèi)容變?yōu)閷?duì)象存在參數(shù)里

添加state(內(nèi)部數(shù)據(jù))
類組件用this.state讀 this.setState來(lái)寫(注意他是異步更新
函數(shù)組件用useState返回?cái)?shù)組 第一項(xiàng)讀第二項(xiàng)寫 一般參數(shù)叫做[n , setN]




注意:
類組件里的set state會(huì)等一下再改變n(異步)
函數(shù)組件中的setN永遠(yuǎn)不會(huì)改變n
在react中最好時(shí)遵循數(shù)據(jù)不可變?cè)瓌t

兩種zengzeng不一樣的變成模型

  • 1.vue編程模型 一個(gè)對(duì)象對(duì)應(yīng)一個(gè)DOM模型 當(dāng)我們?cè)诰幊踢^(guò)程中將對(duì)象的屬性進(jìn)行修改 那么這個(gè)對(duì)象的DOM節(jié)點(diǎn)將會(huì)全部更新 那么在ul中會(huì)立即顯示
  • 2.React編程模型不同對(duì)象對(duì)應(yīng)不同DOM模型 在對(duì)象屬性發(fā)送改變時(shí) 我們一般不會(huì)改變屬性值 而是新建一個(gè)對(duì)象 然后賦予相同的屬性名并改變它的值 那么react會(huì)自動(dòng)對(duì)對(duì)比兩個(gè)虛擬的DOM 找出不同 再局部更新DOM顯示在ul


復(fù)雜state

面對(duì)復(fù)雜state
類組件的setState會(huì)自動(dòng)合并到第一層的屬性
也就是會(huì)保留沒(méi)有被修改的那一部分的數(shù)值


但不會(huì)合并第二層屬性也就是一個(gè)對(duì)象中的屬性


函數(shù)組件更是壓根都不幫你保留
解決方式


解決方式:
在每次修改的后面都加上...操作符或者



意思是將this.state.user里的屬性拷貝到{}里

如果在其中進(jìn)行事件綁定

這里addN箭頭函數(shù)不用加this
引用的時(shí)候記得前面要加this

一般函數(shù)在class里面都是被寫在prototype里面 時(shí)所有的這個(gè)對(duì)象的共有屬性 也就是在原型上面的屬性
而class中的箭頭函數(shù)時(shí)對(duì)象本身的屬性 這就意味著 每個(gè)Son組件都有自己的箭頭函數(shù) 相當(dāng)于寫在了 constructor里面



React 和 Vue的相同點(diǎn)和不同點(diǎn)

相同點(diǎn)

  • 1.都是對(duì)視圖的封裝偿乖,React時(shí)用類和函數(shù)表示一個(gè)組件厂财,而Vue是通過(guò)構(gòu)造選項(xiàng)構(gòu)造一個(gè)組件
  • 2.都提供了createElement的XML簡(jiǎn)寫狐史,React提供的JSX語(yǔ)法(一般屬性放在標(biāo)簽里痒给,其他屬性可以用花括號(hào)括起來(lái)) 而Vue是提供的是模板寫法(template)

不同點(diǎn)

  • 1.React是把HTML放在JS里寫 而Vue是把JS放在HTML里寫






實(shí)例 一個(gè)簡(jiǎn)單的demo 實(shí)現(xiàn)click 加一

類組件

import React from "react";
import ReactDOM from "react-dom";

import "./styles.css";

class App extends React.Component {
  constructor(){
    super()
    this.state = {
      n: 1
    };
  }
  add(){
    this.setState({ n: this.state.n + 1});

    }
    render(){
      return (
      <div className="App">
        n:{this.state.n}
        <button onClick={() => this.add()}>+1</button>
      </div>
    );
  } 
    }
    

函數(shù)組件

import React from "react";
import ReactDOM from "react-dom";

import "./styles.css";

function App() {
  const [n, setState] = React.useState(0)
  return ( 
    <div className="App">
       state: {n}
       <button onClick = {()=> setState(n+1)} >+1</button>
    </div>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末说墨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子苍柏,更是在濱河造成了極大的恐慌尼斧,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件试吁,死亡現(xiàn)場(chǎng)離奇詭異棺棵,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)熄捍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門烛恤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人治唤,你說(shuō)我怎么就攤上這事棒动。” “怎么了宾添?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵船惨,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我缕陕,道長(zhǎng)粱锐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任扛邑,我火速辦了婚禮怜浅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蔬崩。我一直安慰自己恶座,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布沥阳。 她就那樣靜靜地躺著跨琳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桐罕。 梳的紋絲不亂的頭發(fā)上脉让,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音功炮,去河邊找鬼溅潜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛薪伏,可吹牛的內(nèi)容都是我干的滚澜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼嫁怀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼博秫!你這毒婦竟也來(lái)了潦牛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤挡育,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后朴爬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體即寒,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年召噩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了母赵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡具滴,死狀恐怖凹嘲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情构韵,我是刑警寧澤周蹭,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站疲恢,受9級(jí)特大地震影響凶朗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜显拳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一棚愤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杂数,春花似錦宛畦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至羊精,卻和暖如春斯够,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背喧锦。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工读规, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人燃少。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓束亏,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親阵具。 傳聞我的和親對(duì)象是個(gè)殘疾皇子碍遍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容