IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> React —— React中组件的三大属性(statepropsref) -> 正文阅读

[JavaScript知识库]React —— React中组件的三大属性(statepropsref)

文章目录

  • 前言
  • 一、 State(状态)
    • 1.1??State的书写形式
    • 1.2? 绑定事件方法
    • 1.3??修改state值
    • 1.4 小案例
  • 二、props
    • 2.1 基础用法
    • 2.2?批量传递参数
  • 三、ref的使用
    • 3.1 字符串形式的ref
    • 3.2 回调函数下ref
    • 3.3?createRef 创建ref容器
  • 总结

前言

前面我们已经介绍了React中组件的相关知识,这里就以类式组件为例,讲解组件中的三大属性。

一、 State(状态)

概念:state是组件对象最重要的属性,值是对象(可以包含多个key:value的组合),组件被称为`状态机`,通过更新组件的state来更新对应的页面显示(重新渲染组件),有state称为复杂组件。

1.1??State的书写形式

State 的使用对象形式(key,value);

例如:
?

state ={

a: 10

}

1.2? 绑定事件方法

?

 <a href='javascript:;' onClick={demo} >已关注</a>

说明:

  • ·onclick 变为 onClick。
  • ·{函数名}返回值给click,加()就会直接调用。

1.3??修改state值

必须要使用? setState 方法修改state中的值

demo( ){

? ? this.setState({isflag:!this.state.isflag})

}

?}

?ReactDOM.render(<MyClass/>,document.getElementById('hello'));

说明:

  • ·bind会生成一个新的方法 并传对象 改变this的指向
  • ·必须使用setState 修改才有效,修改内容为合并。有值得修改没有的不动

1.4 小案例

打铁需趁热,下面通过一个小案例和大家讲述state的具体用法以及上述小知识点的应用吧!

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>setState的用法</title>
    <style>
        button{
            width: 80px;
            height: 40px;
            border-radius: 10px;
            border: none;
            border: 1px solid #333;
            font-size: 16px;
        }
        span{
            color: red;
            font-size:  24px;
            font-style:italic;
            margin-left: 10px;
        }
        .yes{
            background: red;
        }
        .no{
            background: green;
        }
    </style>
</head>

<body>
    <div id="root"></div>

    <script src="../JS/react.development.js"></script>
    <script src="../JS//react-dom.development.js"></script>
    <script src="../JS/babel.min.js"></script>

    <script type="text/babel">
        // 利用类式组件
        class Person extends React.Component {
            // 类式组件中用来存储数据的地方,类似vue中的data,
            // 因为数据可以多种,所以采用对象的形式,
            // 又因为是在一个类中,所以很多书写习惯类似在定义类
            state ={
                flag: true,
                count: 1
            }
            // 因为是类,所以还是按照类中函数的书写形式,但要注意写成箭头函数形式
            clickNumber = ( )=>{
                // 要改变state中的数据,需要使用setState方法
                // 但也有可能改变的数据较多,所以可以采用对象的形式,
                // 这里的修改是合并修改,即有该属性就改变该属性的值,若没有则不改变
               this.setState({flag: !this.state.flag,
            count: ++this.state.count})
            }
            render() {
                return (
                    <div>
                        <button className={this.state.flag?'yes':'no'} onClick={this.clickNumber}>{this.state.flag ? '已点击':'未点击'}</button>
                        <p>点击次数为:<span>{this.state.count}</span></p>
                    </div>
                )
            }
        }
        // 转为真实dom到页面
        ReactDOM.render(<Person />, document.getElementById('root'));
    </script>

</body>

</html>

二、props

2.1 基础用法

  • 每个组件对象都会有props(properties的简写)属性。
  • 组件标签的所有属性都保存在props中。
  • props 是不可变的,只能通过 props 来传递数据。

具体使用方式如下:

<script type="text/babel">
        // 类式组件
        class Person extends React.Component {
            // 提交事件的函数,要写成箭头函数
           submit=(event)=>{
            // 去除默认事件
            event.preventDefault();
        
            console.log(123);
           }
            render() {
                // 获取props的值
                const {realname,age} = this.props;
                return (
                    <div>
                      <form action="" >
                   姓名: <input type="text" value={realname}/>
                   <br/>
                   <br/>
                   年龄: <input type="text" value={age}/>
                   <br/>
                   <br/>
                   <button onClick={this.submit}>提交信息</button>
                        </form>
                    </div>
                )
            }
        }
        // 渲染真实dom到页面上
        ReactDOM.render(<Person realname="Taylor Swift" age={30}/>, document.getElementById('root'));
    </script>

2.2?批量传递参数

let p1 = {name:'张三',age:29};

ReactDOM.render(<Person {...p1}/>,document.getElementById('hello'));

三、ref的使用

定义:组件内的标签可以定义ref来标识自己。

3.1 字符串形式的ref

    <script type="text/babel">
        // 类式组件
        class Person extends React.Component {
            realname = React.createRef();
            age = React.createRef();
            submit = (event) => {
                // 去除默认事件
                event.preventDefault();

                // 字符串形式的ref的获取方式——这里的refs没有$,要和vue区别开来
                console.log(this.refs.realname.value,this.refs.age.value);
             
            }
            render() {
                return (
                    <div>
                        <form action="">
                           
                            姓名:<input type="text" ref="realname"/>
                            年龄:<input type="text" ref="age" />
                            <br />
                            <br />
                            <input type="button" value="提交信息" onClick={this.submit} />
                        </form>
                    </div>
                )
            }
        }
        // 渲染真实dom到页面中
        ReactDOM.render(<Person />, document.getElementById('root'));
    </script>

3.2 回调函数下ref

 <script type="text/babel">
        // 类式组件
        class Person extends React.Component {
            realname = React.createRef();
            age = React.createRef();
            submit = (event) => {
                // 去除默认事件
                event.preventDefault();

                // 字符串形式的ref的获取方式——这里的refs没有$,要和vue区别开来
                // console.log(this.refs.realname.value);
                // 或函数形式的ref的获取方式
                console.log(this.realname.value);
                // 获取createRef形式的ref
                // console.log(this.realname.current.value);
            }
            render() {
                return (
                    <div>
                        <form action="">
                            {
                                /*
                                姓名:<input type="text" ref="realname"/>
                                年龄:<input type="text" ref="age" />
                                姓名:<input type="text" ref={(event) => { this.realname = event }} />
                                年龄:<input type="text" ref={(event) => { this.age = event }} />
                                 姓名:<input type="text" ref={this.realname} />
                            <br />
                            <br />
                            年龄:<input type="text" ref={this.age}   />
                                */
                            }
                            姓名:<input type="text" ref={(event) => { this.realname = event }} />
                                年龄:<input type="text" ref={(event) => { this.age = event }} />
                            <br />
                            <br />
                            <input type="button" value="提交信息" onClick={this.submit} />
                        </form>
                    </div>
                )
            }
        }
        // 渲染真实dom到页面中
        ReactDOM.render(<Person />, document.getElementById('root'));
    </script>

3.3?createRef 创建ref容器

 <script type="text/babel">
        // 类式组件
        class Person extends React.Component {
            realname = React.createRef();
            age = React.createRef();
            submit = (event) => {
                // 去除默认事件
                event.preventDefault();

                // 字符串形式的ref的获取方式——这里的refs没有$,要和vue区别开来
                // console.log(this.refs.realname.value);
                // 或函数形式的ref的获取方式
                // console.log(this.realname.value);
                // 获取createRef形式的ref
                console.log(this.realname.current.value);
            }
            render() {
                return (
                    <div>
                        <form action="">
                            {
                                /*
                                姓名:<input type="text" ref="realname"/>
                                年龄:<input type="text" ref="age" />
                                姓名:<input type="text" ref={(event) => { this.realname = event }} />
                                年龄:<input type="text" ref={(event) => { this.age = event }} />
                                 姓名:<input type="text" ref={this.realname} />
                            <br />
                            <br />
                            年龄:<input type="text" ref={this.age}   />
                                */
                            }
                            姓名:<input type="text" ref={this.realname} />
                            <br />
                            <br />
                            年龄:<input type="text" ref={this.age}   />
                            <br />
                            <br />
                            <input type="button" value="提交信息" onClick={this.submit} />
                        </form>
                    </div>
                )
            }
        }
        // 渲染真实dom到页面中
        ReactDOM.render(<Person />, document.getElementById('root'));
    </script>

总结

以上就是今日的分享,有vue基础的同学在学react会发现有很多相同之处但react和vue的语法习惯还说不尽相同,所以对于和我一样的初学者还说要多写多练多思考,千万不要眼高手低哦!

最后依旧诚挚祝福屏幕前的你健康快乐,平安幸福!

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 11:46:33  更:2022-10-31 11:47:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 19:51:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码