• 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 所以需要强制绑定

    虽然现在走得很慢,但不会一直这么慢
  • 相关阅读:
    Linux启动或禁止SSH用户及IP的登录,只允许密钥验证登录模式
    emacs 入门教程,菜单汉化,配置文件等杂乱文章
    bzoj3376/poj1988[Usaco2004 Open]Cube Stacking 方块游戏 — 带权并查集
    NOIP复习篇
    HiHocoder 1036 : Trie图 AC自动机
    (皇后移动类)八数码难题引发的搜索思考及总结
    POJ 水题(刷题)进阶
    [TJOI2010] 中位数
    小球和盒子的问题
    [洛谷P2785] 物理1(phsic1)-磁通量
  • 原文地址:https://www.cnblogs.com/xxm980617/p/10969947.html
Copyright © 2020-2023  润新知