react 學習筆記

1.創建組件


第一種方式

注意: 組件名字首字母大寫

function Helloworld (props) {

return <h1>名字`${props.name}`</h1>

}

const element =

reactDom.render(

element,

document.getElementById('exanple')

)

第二種方式

class Helloworld extends React.Component{
????render() {
????????return <h1> hello world</h1>

????????}

}

2.React state

添加一個類構造函數來初始化狀態this.state,類組件始終使用props調用基礎構造函數


數據形式為? 自頂向下或單項數據流。除擁有或者設置它的組件外,其他組件不可訪問


3.React Props

state和props最主要的區別在于 props是不可變的,而state可以根據與用戶交互來改變。

可以通過組建類的defaultProps來設置props的默認值


可以在父組件中設置state,在子組件中通過props傳遞,如下

可以使用propTypes 來設置props的類型,用于校驗

4.react的事件處理

1.寫法? 需要寫成? onclick = {fun} 的形式

2.不能通過return false 的形式來阻止默認行為? ,必須明確使用 e.preventdefault();

3.this 指向問題

向事件處理函數傳遞參數


5.react條件渲染

沒啥特別要記的

6.react列表和 keys

Keys 可以在 DOM 中的某些元素被增加或刪除的時候幫助 React 識別哪些元素發生了變化。因此你應當給數組中的每一個元素賦予一個確定的標識。

7.react組件 api

設置狀態setState:

更新state的狀態時候要調用setState()方法,不可以直接更改? ,setState為異步方法,并且會出發一次足見重繪,除非在shouldComponentUpdate()中實現了一些條件渲染邏輯

形式為:setState(object nextState, function callback)

????參數說明:

? ??nextState,將要設置的新狀態,該狀態會和當前的state合并

? ??callback,可選參數,回調函數。該函數會在setState設置成功,且組件重新渲染后調用。

替換狀態replaceState:

?replaceState(object nextState, function callback)

? ??nextState,將要設置的新狀態,該狀態會替換當前的state

? ??callback,可選參數,回調函數。該函數會在replaceState設置成功,且組件重新渲染后調用

同理還有? 設置屬性?setProps? 和替換屬性 replaceProps

強制更新:forceUpdate

獲取DOM節點:findDOMNode??

? ? 用處:獲取表單字段的值和做一些dom操作

8.react組件的生命周期

componentWillMount?在渲染前調用,在客戶端也在服務端。

componentDidMount?: 在第一次渲染后調用,只在客戶端。之后組件已經生成了對應的DOM結構,可以通過this.getDOMNode()來進行訪問。 如果你想和其他JavaScript框架一起使用,可以在這個方法中調用setTimeout, setInterval或者發送AJAX請求等操作(防止異步操作阻塞UI)。

componentWillReceiveProps?在組件接收到一個新的 prop (更新后)時被調用。這個方法在初始化render時不會被調用。

shouldComponentUpdate?返回一個布爾值。在組件接收到新的props或者state時被調用。在初始化時或者使用forceUpdate時不被調用。 (可以通過這個方法控制組件是否重新渲染。如果返回?false?組件就不會重新渲染。這個生命周期在 React.js 性能優化上非常有用。)

可以在你確認不需要更新組件時使用。

componentWillUpdate在組件接收到新的props或者state但還沒有render時被調用。在初始化時不會被調用。

componentDidUpdate?在組件完成更新后立即調用。在初始化時不會被調用。

componentWillUnmount在組件從 DOM 中移除之前立刻被調用。

9.React AJAX

ajax請求放在?componentDidMount? ? 內實現

10.?

11. react 表單

react 表單好麻煩的哦哦,,,,(單向數據流最大的弊端了吧,,,,)




/--------------------------------react 小書-----------------------------/

12. 容器類組件

? 1)組件按正常層級寫,組件內的內容會根據 props.children 來獲取到。


2.?設置?innerHTML?可能會導致跨站腳本攻擊(XSS),所以一般情況下不使用這個嵌入html標簽,但是想要嵌入的話可以使用 dangerouslySetInnerHTML={{__html: this.state.content}}

3.style? ?

? ? react 接受一個對象來設置樣式,style = {{color: 'red', fontSize: this.state.font}}

4.高階組件

? ? 概念:高階組件就是一個函數,傳給它一個組件,返回一個新組件。(注意是一個函數)


高階組件實就是為了組件之間的代碼復用。組件可能有著某些相同的邏輯,把這些邏輯抽離出來,放到高階組件中進行復用。高階組件內部的包裝組件和被包裝組件之間通過?props?傳遞數據

高階組件,可以封裝獲取LocalStorage的高階組件,避免其他組件內重復再寫讀取LocalStorage的函數(自己: 不用redux的時候可以這么做,也可以直接用redux)

5.react的 context 也可以實現在祖組件中聲明,其他子組件或者孫子組件也可以訪問的效果,類似與全局變量,修改后其他引用的地方也被改動,redux的原理也是依照這種思想,但是react并不推崇這種寫法,擔心全局變量污染。(個人覺得:應該使用合適的話會比props方便的多)

6. redux 是為了大張旗鼓的告訴別人我要修改數據!!! 通過dispatch


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。