1. 程式人生 > >(一)Reac入門

(一)Reac入門

一:入門

1:chrome如何安裝React dev Tools

https://blog.csdn.net/gezilan/article/details/79741578  React工具的安裝

2:Hello React

    const vDom = <h1>Hello React</h1> // 千萬不要加引號

    // 渲染虛擬DOM到頁面真實DOM容器中

ReactDOM.render(vDom, document.getElementById('test'))                                                 

3: 

1. 建立虛擬DOM

    /*方式一: 純JS(一般不用)建立虛擬DOM元素物件*/

    const msg = 'I Like You!'

    const myId = test

 

    const vDOM1 = React.createElement('h2', {id: myId}, msg.toUpperCase())

    // 2. 渲染到真實頁面

    const domContainer = document.getElementById('test1')

    // debugger

ReactDOM.render(vDOM1, domContainer)          

 

// 1. 建立虛擬DOM

    /*方式二: JSX建立虛擬DOM元素物件*/

    const vDOM2 = <h3 id={myId.toUpperCase()}>{msg.toLowerCase()}</h3>

    // debugger

    // 2. 渲染到真實頁面

    ReactDOM.render(vDOM2, document.getElementById('test2'))

 

4:元件化程式設計

 /*方式1: 工廠函式元件(簡單元件)*/

function MyComponent () {

  return <h2>工廠函式元件(簡單元件)</h2>

}

 

/*方式2:  ES6類元件(複雜元件)*/

class MyComponent2 extends React.Component {

  render () {

    console.log(this) // MyComponent2的例項物件

    return <h2>ES6類元件(複雜元件)</h2>

  }

 

二:元件的三大屬性

 

1: state屬性

一:概念理解

(1)    state是元件物件最重要的屬性, 值是物件(可以包含多個數據)

(2)    元件被稱為"狀態機", 通過更新元件的state來更新對應的頁面顯示(重新渲染元件)

 

二.編碼操作

(1)    初始化狀態:

  constructor (props) {

    super(props)

    this.state = {

      stateProp1 : value1,

      stateProp2 : value2

    }

  }

(2)    讀取某個狀態值

  this.state.statePropertyName

(3)    更新狀態---->元件介面更新

  this.setState({

    stateProp1 : value1,

    stateProp2 : value2

  })

   class Like extends React.Component{
       constructor(props){
           super(props)
           this.state = {
               isLikeMe : false
           }
           this.Change = this.Change.bind(this)
       }

       Change(){
           //點選的時候執行這個方法
           //設定狀態數值
           const isLikeMe = !this.state.isLikeMe
           this.setState({
               isLikeMe
           })
       }

       render(){
         //執行渲染

        return <h2 onClick={this.Change}>{this.state.isLikeMe?"我喜歡你":"我不喜歡你"}</h2>
       }
   }
   //渲染元件
  ReactDOM.render(<Like/>,document.getElementById("example"))

  

2: props屬性

(1)    每個元件物件都會有props(properties的簡寫)屬性

(2)    元件標籤的所有屬性都儲存在props中

2 作用

(1)    通過標籤屬性從元件外向元件內傳遞變化的資料

(2)    注意: 元件內部不要修改props資料

 

class Person extends React.Component{

   render(){
       return (
           <ul>
               <li>name:{this.props.name}</li>
               <li>age:{this.props.age}</li>
               <li>sex:{this.props.sex}</li>
           </ul>
       )
   }

 }
const p1 = {
     name : "小名",
     age : 20,
     sex : "男"
}

 Person.propTypes = {
     name:PropTypes.string.isRequired,
     age:PropTypes.number.isRequired,
     sex:PropTypes.string.isRequired
 }
 Person.defaultProps = {
     name: 'Stranger',
     age : 20,
     sex : "男"
 };

 ReactDOM.render(<Person {...p1}/>,document.getElementById("example1"))
 ReactDOM.render(<Person />,document.getElementById("example2"))

  

問題: 請區別一下元件的props和state屬性

1)         state: 元件自身內部可變化的資料

2)        props: 從元件外部向元件內部傳遞資料, 元件內部只讀不修改

3: refs與事件處理

 

class Mycompent extends React.Component{

    constructor(props){
       super(props)
       this.Showinput = this.Showinput.bind(this)
        this.HandleBlur = this.HandleBlur.bind(this)
    }

   Showinput(){
        //點選的時候彈出 content數值
        const input = this.refs.content; //獲取到input元素//類似於dom的標識
        alert(input.value)
    }

    HandleBlur(event){
          //event.target表示觸發的這個元素
        alert(event.target.value)
    }

    render(){
        return (
           <div>
               <input ref="content" type="text"/>  
               <button onClick={this.Showinput}>點我</button>  
               <input type="text" placeholder="失去焦點" onBlur={this.HandleBlur}/>
           </div>
        )
    }
}

ReactDOM.render(<Mycompent/>,document.getElementById("example"));