React做爲Facebook 內部開發 Instagram 的項目中,是一個用來構建用戶界面的優秀 JS 庫,於 2013 年 5 月開源。做爲前端的三大框架之一,React的應用能夠說是很是的普遍,包括BAT在內的許多大公司不少項目都是基於其開發的。html
Vue:除了VDom以外,Vue的響應性能和React相比仍是有很大的區別,不管是自己的語法層面仍是外圍的第三方支持軟件,總之,遷移起來不會是那麼容易的事情。前端
可是做爲一名熱愛前端的技術人員,學習優秀的技術棧彷彿已經成了一種習慣,在這裏結合阮一峯React以及對阮一峯老師15年的教程進行版本更新,簡單介紹一下React的入門,本文中全部demo代碼都以圖片形式展現,目的是建議手打嘗試,而不是直接複製,如需代碼能夠點擊這裏。vue
create-react-app 是來自於 Facebook,經過該命令咱們無需配置就能快速構建 React 開發環境。react
create-react-app 自動建立的項目是基於 Webpack + ES6 。git
而後打開瀏覽器輸入http://localhost:3000/,就能夠看到React的六芒星LOGO了。
如下是React重要的部分github
由於React沒有vue那樣的v-for一鍵循環,因此要本身手動用map來實現 效果圖:算法
JSX 容許直接在模板插入 JavaScript 變量。若是這個變量是一個數組,則會展開這個數組的全部成員.咱們定義了一個arr,裏面是2個標題標籤,經過在ul模板中添加{arr}來實現效果**(注意不是vue的"",二者不要搞混了)** 小程序
this.props.attr是取到組件傳遞過來的數據或屬性,而this.props.children則表示組件的全部子節點,能夠經過this.props.children.map來遍歷出來驗證。 數組
組件的屬性能夠接受任意值,字符串、對象、函數等等均可以。有時,咱們須要一種機制,驗證別人使用組件時,提供的參數是否符合要求。瀏覽器
組件類的PropTypes屬性,就是用來驗證組件實例的屬性是否符合要求
MyTitle中有一個title屬性,他的值爲一個字符串,咱們能夠經過MyTitle.propTypes來定義該組件中屬性的類型.若是將title: PropTypes.string改成其餘類型,就會報如下的錯誤。yarn add prop-types
import PropTypes from 'prop-types'
class App extends Component {
handleClick () {
this.refs.myTextInput.focus()
}
render() {
return (
<div className="App">
<LikeButton/>
<input type="text" ref="myTextInput"/>
<input type="button" value="Focus the text input" onClick={ this.handleClick.bind(this) }/>
</div>
);
}
}
複製代碼
在這裏須要強調的是,React的事件中若是不用剪頭函數,那就要用bind來綁定this。
React中的state就至關於vue裏的data數據存儲,而小程序的this.setData,你們懂的..
class LikeButton extends Component {
state = {
liked: false
}
handleClick () {
// console.log(this)
this.setState({
liked: !this.state.liked
})
}
render() {
const text = this.state.liked?'liked':'don\'t like' return ( <p onClick={ () => this.handleClick() }> You { text } this.click to toggle </p> ) } } 複製代碼
在這裏定義一個text變量,經過state中的liked來判斷text的值,而後再經過onClick點擊事件來反覆改變liked的值,效果能夠本身經過代碼實現看看,就是普通的MVVM模型。
vue裏面v-model一鍵實現的事情React又沒有-0-,不過咱們能夠經過onChange事件來簡單實現它,直接上代碼.
class App extends Component {
state= {
value: 'Hello!'
}
handleChange (event) {
this.setState({
value: event.target.value
}) }
render() {
const val = this.state.value
return (
<div className="App">
<div>
<input type="text" value={val} onChange={this.handleChange.bind(this)}/>
<p>{ val }</p>
</div>
</div>
);
}
}
複製代碼
組件的生命週期分紅三個狀態:
React 爲每一個狀態都提供了兩種處理函數,will 函數在進入狀態以前調用,did 函數在進入狀態以後調用,三種狀態共計五種處理函數。
此外,React 還提供兩種特殊狀態的處理函數。
另外,組件的style屬性的設置方式也值得注意,不能寫成style="opacity:{this.state.opacity};"
而要寫成style={{opacity: this.state.opacity}}
做爲一個前端程序猿很不容易,前端的技術更新太快,也出現了「別更新了,老子學不動了」這類前端的梗。不過前端層出不窮的技術讓咱們看到了前端的將來,咱們都是熱於分享的人,但願正在學習的我也可以幫助到正在學習的你。 這些demo都在個人github,感興趣的朋友能夠clone下來看下,最近搭了一個我的blog,歡迎來踩,PC端主題一股科幻風有沒有!!主題來自於hexo主題 最後說一句!很重要!若是個人這篇文章幫助到了你,那你能夠點個star再走嘛~一塊兒upupup!