React(基礎一)_react中的三大屬性


一、前言                                                                               

                         屬性1:state

                         屬性二:props

                         屬性3:ref與事件處理

二、主要內容                                                                        

屬性1:state

               1、認識

                                     1)state是組件對象中最重要的屬性,值是一個對象(可以包含多個數組,有點像vue中的data屬性)

                                     2)組件被稱為“狀態機”,通過更新組件的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 })

 

                     3、案例演示

                       需求: 點擊組件,讓其中的文字發生變化

                         

                      

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id="obj"></div>
    <script type="text/javascript" src="./js/react.development.js"></script>
    <script type="text/javascript" src="./js/react-dom.development.js"></script>
    <script type="text/javascript" src="./js/babel.min.js"></script>
    <script type="text/babel">
        
                //自定義Like組件
        class Like extends React.Component{
                   //定義初始化狀態
            constructor(props){
            super(props)  //交給父類去執行
            this.state={  //定義state屬性,並添加一個isLikeMe數據
            isLikeMe:false

           }
                   
                   //強制綁定,讓函數handleClick等於當前組件
           this.handleClick= this.handleClick.bind(this)

           }
                   //定義操作函數,注意函數里面的this是undefined
 
           handleClick(){
                   //更新state狀態
           const isLikeMe = !this.state.isLikeMe  
           this.setState({
           isLikeMe
           })

           }

           render(){
                   //讀取狀態
           const {isLikeMe} = this.state
           return <h1 onClick={this.handleClick}>{isLikeMe ? '我喜歡你':'你喜歡我'}</h1>

           }

        }


          //渲染
        ReactDOM.render(<Like />, document.getElementById('obj'))
    </script>
</body>
</html>

 

                     4、注意點:

                    1.更新state狀態定義的函數里面的this不是指向當前對象的,需要用bind強制綁定this為當前組件

                  2.強制綁定this:  this.handleClick= this.handleClick.bind(this)

 

 

屬性二:props

                 1、理解:

                                1)每個組件對象都會有props(properties的簡寫)屬性

                                2)組件標簽中所有的屬性都保存在props中

                  2、作用:

                               1)通過標簽屬性從組件外向組件內傳遞變化的數據

                                2)組件內部不需要修改props數據

                  3、props的操作:

//1)內部讀取某個屬性值

this.props.propertyName


//2) 對props中的屬性值進行類型限制和必要性限制

方法一:新版本中已經被棄用
Person組件名:
Person.propTypes={

       name: React.PropTypes.string.isRequired,
       age:React.PropTypes.number.isRequired
}

方法二:
需要用到prop-types.js文件
Person.propTypes={
         name:PropTypes.string.isRequired

        }

//3)擴展屬性:對象的所有屬性通過props傳遞
<Person {...person} />   //默認傳遞了所有屬性


//4)默認屬性值
Person.defaultProps = {

     name:"Mary"

}


//5)組件類的構造函數,
constructor(props){

     super(props)
    console.log(props)//里面存放所有屬性


}

 

 

                 4、舉例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id="ul"></div>
    <script type="text/javascript" src="./js/react.development.js"></script>
    <script type="text/javascript" src="./js/react-dom.development.js"></script>
    <script type="text/javascript" src="./js/prop-types.js"></script>
    <script type="text/javascript" src="./js/babel.min.js"></script>
    <script type="text/babel">
        
        function List(props){

        return (
        <ul>
        <li>姓名:{props.name}</li>
        <li>年齡: {props.age}</li>
        <li>性別:{props.sex}</li>
        </ul>

        )

        }
        
        const person ={
        name:'xxm',
        age:18,
        sex:''
        }
    
       //設置默認屬性    
        List.defaultProps={

        age:55,
        sex:""

        }

        //對類型進行限制和必要性限制
         List.propTypes={
         name:PropTypes.string.isRequired

        }
         //使用擴展屬性
        ReactDOM.render(<List {...person}/>, document.getElementById('ul'))
    </script>
</body>
</html>

 

 

屬性3:ref與事件處理

          1、理解:

              1)組件內的標簽都可以定義ref屬性來標識自己

               2)在組件中可以通過this.msgInput來得到真實的DOM元素

               3)作用:通過ref獲取到組件特定的標簽對象,進行讀取相關數據

 

//ref使用方式一:

<input type="text" ref="content"/>


//ref使用方式二:
<input type="text" ref={input=>this.input=input}/>

//input=>this.input=input 的含義是將當前的input 賦值給組件里面的input

 

 

      2、事件處理

          1)通過onXxx屬性指定組件的事件處理函數

          2)React中的事件是通過事件委托方式處理的(委托給組件最外層的元素)

          3)通過event.target可以得到發生事件的DOM元素

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id="obj1"></div>
    <script type="text/javascript" src="./js/react.development.js"></script>
    <script type="text/javascript" src="./js/react-dom.development.js"></script>
    <script type="text/javascript" src="./js/prop-types.js"></script>
    <script type="text/javascript" src="./js/babel.min.js"></script>
    <script type="text/babel">
        
        class MyComponent extends React.Component{

        constructor(props){
        super(props)
                 //給處理函數強制綁定this
        this.handleClick=this.handleClick.bind(this)
        this.handleBlur = this.handleBlur.bind(this)

        }


        handleClick(){

        alert(this.input.value)


        }

        handleBlur(event){

          alert(event.target.value)
        }

        render(){

        return (
              <div>
                  <input type="text" ref="content"/>
                  <input type="text" ref={input=>this.input=input}/>
                  <button onClick={this.handleClick}>點擊按鈕</button>
                  <input  type="text" placeholder="請輸入數據" onBlur={this.handleBlur} />
              </div>
        )

        }

        }

        

        ReactDOM.render(<MyComponent />, document.getElementById("obj1"))
    </script>
</body>
</html>

 

三、總結                                                                               

 

  • React中props和state都是存儲數據的區別如下

1)state: 組件自身內部可變化的數據

2)props: 從組件外部向組件內部傳遞數據,組件內部只讀取不修改

 

  • 注意點:

1)組件內置的方法中的this為組件對象,z

2) 在組件類中自定義的處理函數方法的this默認為null 所以需要強制綁定

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM