react學(xué)習(xí)筆記

react學(xué)習(xí)筆記

1. Jsx語法

在html中屬性的值通過雙引號(字符串?dāng)?shù)據(jù))或者大括號(表達式)

//雙引號
const a = ![](1.jpg)

//大括號
const x = "1.jpg"
const a = <img src={x} />

//有子元素的情況抬驴,都只能包含在同一個元素內(nèi),與vue語法保持一致
const a = (
    <div>
        <h1>標(biāo)題</h1>
        <span>gogogo</span>
    </div>
)

注意:react對于jsx中的變量都會進行轉(zhuǎn)義闺属,以免xss攻擊

2. 渲染DOM

通過reactDOM.render方法來渲染dom節(jié)點绢馍,并且react元素一旦創(chuàng)建就是不可變的,唯一的辦法就是重新創(chuàng)建個新的元素然后重新通過ReacDOM.render去渲染,就是這么cool丛楚!??????。但是每次更新憔辫,不是統(tǒng)一將整個元素都更新趣些,都只會修改更新了的元素

function tick(){
  const ele = (
    <div>
        <h1>現(xiàn)在的時間是:{new Date().toLocaleTimeString()}</h1>
    </div>
  );
  ReactDOM.render(
    ele,
    document.getElementById('root')
  )
}
setInterval(tick,1000);

?

3. 函數(shù)組件開發(fā)

當(dāng)用戶看到用戶自定義的組件的時候,就會將jsx的屬性作為單個對象(props)傳遞給此組件

function Aiv(props){
  return <h1>hi,{props.name}</h1>
}
const e = <Aiv name = "haha" />;
ReactDOM.render(
    e,
    document.getElementById('root')
)

注意:自定義的組件的首字母必須為大寫贰您,否則不能識別

4. Props是只讀的

react雖然是非常靈活的坏平,但是有一條嚴格的規(guī)范:props是只讀的,雖然也可以改變锦亦,但是不推薦舶替。??????

比如:

//合格的形式
function Aiv (x, y){
    return x+y;
}
//不合格的形式,傳參x被修改了
function Aiv (x, y){
  x = x + y;
}

5. 類組件開發(fā)

注意事項:

  1. 創(chuàng)建一個es6語法的class類杠园,并且繼承自React.Component
  2. 里面有一個render()方法顾瞪,將原先函數(shù)組件的中的內(nèi)容,如第3點函數(shù)組件例子的內(nèi)容放到此方法中
  3. props用this.props替換
class Aiv extends React.Component{
  render(){
    return <h1>hi,{this.props.name}</h1>
  }
}

PS:相比于函數(shù)組件抛蚁,類組件還多了本地狀態(tài)和生命周期掛鉤陈醒。??????

6. 增加本地狀態(tài)state

  1. 將render中的this.props替換為this.state

    class Aiv extends React.Component{
      render(){
        return <h1>hi,{this.state.name}</h1>
      }
    }
    
  2. 在類組件中增加一個constructor方法來初始化this.state

    class Aiv extends React.Component{
      constructor(props){
        super(props);
        this.state = {name:'hy'};
        
      }
      render(){
        return <h1>hi,{this.state.name}</h1>
      }
    }
    

7. 增加生命周期方法

此系列方法是為了拓展ReacDOM的渲染的不可變性。使用此方法可以動態(tài)的去改變dom瞧甩,讓我們拭目以待钉跷。

class Aiv extends React.Component{
  constructor(props){
    super(props);
    this.state = {name:'hy'};
    this.i = 1;
  }
  componentDidMount() {
    this.timerID = setInterval(()=>this.setName(),1000);
  }
  componentWillUnmount() {
    clearInterval(this.timerID);
  }
  setName(){
    this.i ++;
    this.setState({name:"hy"+this.i})
  }
  render(){
    return <h1>hi,{this.state.name}</h1>
  }
}
ReactDOM.render(
  <Aiv />,
  document.getElementById('root')
); ;
  1. componentDidMount方法是在ReacDOM渲染dom節(jié)點之后執(zhí)行
  2. componentWillUnmount方法是在該dom節(jié)點被刪除的時候執(zhí)行

8. 正確地使用state

1). 不能直接操作state屬性

//wrong
this.state.name = "hy1";

//correct
this.setState({
  name: "hy1"
})

2). state更新可能是異步的

React為了性能,支持單次更新中可以批量執(zhí)行多個setState肚逸,所以你不能在setState中使用this.state這種方式來操作state屬性尘应。因為this.state可能是之前的屬性惶凝,還沒來得及改變。如下面的例子對比:

//假設(shè)count = 1
this.setState({
  count:this.state.count+1
})
this.setState({
  count:this.state.count+1
})
//最后count = 2

但是犬钢,setState方法可以除了接收object對象苍鲜,還可以接收function參數(shù)。傳入function完美解決異步問題??????玷犹。使用方法:setState( function( prevState混滔,[props] ){} )

this.setState(function(x){
  return {
    count: x.count+1
  }
})
this.setState(function(x){
  return {
    count: x.count+1
  }
})

操練以下

3). state屬性可以只更新單個屬性

this.state = {
    posts: [],
    comments: []
};

this.setState({
  posts: ['hy']
})

9. state作為參數(shù)傳遞

直接看例子:

<FormattedDate date={this.state.date} />

function FormattedDate(props) {
  return <h2>It is {props.date.toLocaleTimeString()}.</h2>;
}

等價于下面:

<h2>It is {this.state.date.toLocaleTimeString()}.</h2>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末歹颓,一起剝皮案震驚了整個濱河市坯屿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巍扛,老刑警劉巖领跛,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異撤奸,居然都是意外死亡吠昭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門胧瓜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矢棚,“玉大人,你說我怎么就攤上這事府喳∑牙撸” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵钝满,是天一觀的道長兜粘。 經(jīng)常有香客問我,道長弯蚜,這世上最難降的妖魔是什么妹沙? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮熟吏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘玄窝。我一直安慰自己牵寺,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布恩脂。 她就那樣靜靜地躺著帽氓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俩块。 梳的紋絲不亂的頭發(fā)上黎休,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天浓领,我揣著相機與錄音,去河邊找鬼势腮。 笑死联贩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捎拯。 我是一名探鬼主播泪幌,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼署照!你這毒婦竟也來了祸泪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤建芙,失蹤者是張志新(化名)和其女友劉穎没隘,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體禁荸,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡右蒲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了屡限。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片品嚣。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖钧大,靈堂內(nèi)的尸體忽然破棺而出翰撑,到底是詐尸還是另有隱情,我是刑警寧澤啊央,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布眶诈,位于F島的核電站,受9級特大地震影響瓜饥,放射性物質(zhì)發(fā)生泄漏逝撬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一乓土、第九天 我趴在偏房一處隱蔽的房頂上張望宪潮。 院中可真熱鬧,春花似錦趣苏、人聲如沸狡相。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尽棕。三九已至,卻和暖如春彬伦,著一層夾襖步出監(jiān)牢的瞬間滔悉,已是汗流浹背伊诵。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留回官,地道東北人曹宴。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像孙乖,于是被迫代替她去往敵國和親浙炼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

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