React知識點小結

react Dom與JSX關系

react頁面渲染吠冤,由三部分構成:state 數據 + JSX模版 => 真實Dom(顯示)

正常react渲染頁面的步驟
  1. 頁面首次加載:state 數據 + JSX模版 => 真實dom顯示
  2. 頁面改變:state 數據改變
  3. state + JSX模版重新生成 Dom 替換原始Dom 顯示
react改進方式一:
  1. 頁面首次加載:state 數據 + JSX模版 => 真實dom顯示
  2. 頁面改變:state 數據改變
  3. state + JSX模版重新生成新的Dom 但是不直接替換原始Dom 顯示
  4. 將新的Dom和老的Dom做比對摇肌,找出差異
  5. 將新的Dom中修改的部分 替換到老的Dom中
react改進方式二(也是目前react實現的方式):
  1. 頁面首次加載:state 數據 + JSX模版 => 生成虛擬Dom(JS對象) => 生成真實dom顯示
//虛擬Dom
['div',{id:'id1'},['span',{},'hello']]
//真實Dom
<div>
  <span>hello2</span>
</div>
  1. 頁面改變:state 數據改變
  2. 生成新的虛擬Dom苞冯,(即一個JS對象裳朋,用它來翻譯成真實Dom)
//虛擬Dom
['div',{id:'id1'},['span',{},'hello2']]
  1. 比對兩個虛擬Dom(兩個JS對象比對)无蜂,更改虛擬 Dom值
['div',{id:'id1'},['span',{},'hello2']]
  1. 由更改后的虛擬Dom重新生成 真實Dom顯示
<div>
  <span>hello2</span>
</div>
改進方式二的優(yōu)勢:
  1. 操作都是JS對象抓狭,減少來對Dom的創(chuàng)建和比對枕荞。JS對象在js中比較替換是直接操控JS自身對象(Diff 算法)瓢宦,性能消耗比較小碎连,若是 生成新的Dom對象及對Dom對象的比對,需要操作系統(tǒng)的application的方法驮履,性能消耗大鱼辙。
  2. 若兩次setState時間較短,react會對比兩次JS對象玫镐,最后只重新生成一次Dom

Diff 算法 -- 層層比對倒戏,父級相同則比對child,若child不同恐似,直接替換杜跷,后續(xù)child不進行比對了。算法簡單矫夷,因此比對速度快葛闷。因此在循環(huán)中key,盡量別使用index双藕,這樣就會使每次的循環(huán)都不能復用之前的index對象淑趾。引入Key值的原因就是為了提高虛擬Dom比對性能

ref 使用

// 1. 直接賦值
<input ref={(inputValue)=>{this.inputValue = inputValue}}> </input>
//使用:
console.log(this.inputValue.value);
 // 2. 
<input ref="inputValue"> </input>
//使用:
console.log(this.refs.inputValue.value);

ref的使用可以由以上兩種方法, 但是react并不推薦大量使用ref,建議用數據驅動的方式操作Dom。
例如:利用ref的方式獲取dom忧陪,在和setState同時使用會出問題:因為SetState是異步的扣泊,直接通過ref獲取Dom節(jié)點從而取得的值可能不是最新的值近范。解決方案:setState后第二個參數里執(zhí)行:

this.setState({
                dataList: tempList,
            }, ()=> {
                console.log(this.refs.inputValue.value);
            })

react 路由

  • 路由分為三種:靜態(tài)路由:urlPath不同跳轉不同頁面;動態(tài)路由:頁面之間跳轉定義參數類型; get路由:頁面之間跳轉旷赖,和get請求一樣方便傳多個參數顺又,一般用 cnpm install url --save 使用URL庫進行參數解析, 本文樣例Demo中有使用例子
路由類型 路由注冊 路由跳轉 路由接收
靜態(tài)路由 <Route exact path="/" component={RouterHome} /> <Link to="/">Home</Link> -
動態(tài)路由 <Route path="/RouterContent/:myParams" component={RouteContent} /> <Link to={`/RouterContent/${value}`}> {value} </Link> this.props.match.params.myParams
get路由 <Route path="/RouterContent" component={RouteContent} /> <Link to={`/RouterContent?aid=${value}`}>{value}</Link> this.props.location.search

ant Design 使用

css 入門補充小知識

  1. ID選擇符等孵,調用的時候需要 <p id='bold'> </p>
// csss:
p#bold {
    color: red;
}
//js:
<p id='bold'>
          這個段落應該是粗體
</p>
  1. 群選擇符
/*群選擇符, 表示同時對逗號分割對標簽操作*/
p,h1,h2 {
    text-align: center;
}
  • inherit: 繼承父級的上層屬性
  • background-attachment: fixed 背景圖片是否跟著網頁滑動
  • font-style : 是否斜體稚照,oblique italic normal
  • font-weight: 字體粗細,font-size:字體大小
  • line-height: 行與行間距俯萌。
  • font-variant: 全部大小寫果录,但是首字母的大寫會更大些
  • text-indent: 文本首行縮進,px或者%
  • text-align: 文本對齊
  • text-decoration: 上滑線咐熙,下劃線弱恒,刪除線
  • text-transform: 首字母大寫,變大寫棋恼,變小寫
  • :link: 設置未訪問鏈接屬性返弹,:visited 設置訪問過鏈接屬性,:active 鼠標點擊與釋放爪飘,:hover 鼠標懸停時
  • float: left,right // 向哪個方向浮動
  • display:
    display: flex; //將對象作為彈性伸縮盒顯示
    display: block;//block是一塊狀元素的方式顯示
  • position:
    static(靜態(tài)定位): 默認值义起。沒有定位,元素出現在正常的流中(忽略 top, bottom, left, right 或者 z-index 聲明)
    relative(相對定位):生成相對定位的元素师崎,通過top,bottom,left,right的設置相對于其正常(原先本身)位置進行定位默终。可通過z-index進行層次分級犁罩。
    absolute(絕對定位):生成絕對定位的元素齐蔽,相對于 static 定位以外的第一個父元素進行定位。元素的位置通過 "left", "top", "right" 以及 "bottom" 屬性進行規(guī)定床估『危可通過z-index進行層次分級。
    fixed(固定定位):生成絕對定位的元素顷窒,相對于瀏覽器窗口進行定位蛙吏。元素的位置通過 "left", "top", "right" 以及 "bottom" 屬性進行規(guī)定⌒可通過z-index進行層次分級鸦做。
  • display: flex , Flex 布局以后谓着,子元素的float泼诱、clear和vertical-align屬性將失效 。更多flex布局參考 阮一峰flex布局教程
flex容器(父組件)屬性名 枚舉值 備注
flex-direction row赊锚、row-reverse治筒、column 屉栓、column-reverse 布局方向: ??、 ?? 耸袜、??友多、??
flex-wrap nowrap、wrap堤框、wrap-reverse 不換行域滥、換行(第一行在最上方)、換行(第一行在最下方)
flex-flow <flex-direction> direction和wrap蜈抓,都可以設置
justify-content flex-start启绰、flex-end、center沟使、space-between委可、space-around 居左、居右腊嗡、居中着倾、兩邊對齊、均分間隔相等
align-items flex-start燕少、flex-end屈呕、center、baseline棺亭、stretch 項目的第一行文字的基線對齊 、 默認值
align-content flex-start蟋软、flex-end镶摘、center、space-between 岳守、space-around 定義了多根軸線的對齊方式凄敢。如果項目只有一根軸線,該屬性不起作用
flex項目(子組件)屬性名 枚舉值 備注
order <integer> 項目排列順序湿痢。從0開始數字越小越靠前
flex-grow <number> 放大比例涝缝,默認為0 不放大
flex-shrink <number> 縮小比例,默認為1譬重,若空間不足拒逮,所有項目都將縮小
flex-basis <length> 跟width、height一樣臀规,占據固定空間
flex <flex-grow, flex-shrink> || <flex-basis>都可設置 flex:分數百分數多個數
align-self auto滩援、flex-start、flex-end塔嬉、center玩徊、baseline租悄、stretch 單個子組件和其他子組件不同對齊方式,覆蓋align-items:--_-
css 沖突
  • 更具體的恩袱,聽從最具體的樣式泣棋, id > 類別 > 元素
  • 兩個層級樣式表,遵循離內容比較近的樣式
  • !important 畔塔,申明指示的位置優(yōu)先潭辈,幫助診斷是否沖突
  • 選擇符,
  • 元素

本文樣例Demo

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末俩檬,一起剝皮案震驚了整個濱河市萎胰,隨后出現的幾起案子,更是在濱河造成了極大的恐慌棚辽,老刑警劉巖技竟,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異屈藐,居然都是意外死亡榔组,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門联逻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搓扯,“玉大人,你說我怎么就攤上這事包归∠峭疲” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵公壤,是天一觀的道長换可。 經常有香客問我,道長厦幅,這世上最難降的妖魔是什么沾鳄? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮确憨,結果婚禮上译荞,老公的妹妹穿的比我還像新娘。我一直安慰自己休弃,他們只是感情好吞歼,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著玫芦,像睡著了一般浆熔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天医增,我揣著相機與錄音慎皱,去河邊找鬼。 笑死叶骨,一個胖子當著我的面吹牛茫多,可吹牛的內容都是我干的。 我是一名探鬼主播忽刽,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼天揖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了跪帝?” 一聲冷哼從身側響起今膊,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伞剑,沒想到半個月后斑唬,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡黎泣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年恕刘,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抒倚。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡褐着,死狀恐怖,靈堂內的尸體忽然破棺而出托呕,到底是詐尸還是另有隱情含蓉,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布项郊,位于F島的核電站谴餐,受9級特大地震影響,放射性物質發(fā)生泄漏呆抑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一汁展、第九天 我趴在偏房一處隱蔽的房頂上張望鹊碍。 院中可真熱鬧,春花似錦食绿、人聲如沸侈咕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耀销。三九已至,卻和暖如春铲汪,著一層夾襖步出監(jiān)牢的瞬間熊尉,已是汗流浹背罐柳。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留狰住,地道東北人张吉。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像催植,于是被迫代替她去往敵國和親肮蛹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349