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学习第三天 -> 正文阅读

[JavaScript知识库]react学习第三天

一、state状态

每个组件可以拥有自己的data数据,并且这个数据是自己独享
在react中我们需要使用state(状态)来表示我们每一个组件自己的data数据
在react中state需要在构造函数中进行设置 类似于vue中data data() {}
例如:

 // react中state状态设置
 //等同于构造函数
        constrcutor(props) {
            super(props)  // 超类
            this.state={
                // data数据
            }
        }
        //以上是固定写法
function demo(){
	var a = 123
	var b = 456
	var obj ={
	  fn:function(){
      	console.log(123);
      }
   }
}
const test = new demo()
//这里new 就相当于构造出来一个函数我们可以通过原型链上添加我们想要用的值
//下面我们就打印一下test

在这里插入图片描述

我们可以在Prototype中添加我们想要的状态,同时 我们需要使用this.state.属性名 来获取 state里边设置的data数据

//我们先创建一个类组件
<script type="text/babel">
	var num=123
	class Child extends React.Component{
		//constructor构造一个函数
        constructor(props) {
            super(props)
            this.state={
                num: 456,
                stus: {
                    name: '张三',
                    age: 15,
                    sex: '男',
                    score: 98
                },
                arr: ['标题一','标题二','标题三'],
                bool: false
            }
        }
                render() {
            return(
                <div className="child">
                    child--{num}--{this.state.num} //第一个num指的是外部变量 第二个指的使构造函数中的num
                    <p>姓名: {this.state.stus.name}</p>//姓名:张三
                    <p>性别: {this.state.stus.sex}</p>//性别:男
                    <p>{this.state.arr[0]}</p>//标题一
                    <p style={{display: this.state.bool?'block':'none'}}>这是一段文本内容</p>//运用css样式加上this.state.boll的结果使标签隐藏或展示
                </div>
            )
        }
	}
</script>

在这里插入图片描述

1.1使用react实现评论的隐藏与显示

//挂载区域
   <div id="app"></div>
    <script type="text/babel">
    
    class Discuss extends React.Component{
        render() {
            return(
                <div className="discuss">
                    评论
                    <Ipt></Ipt>
                    <Lists></Lists>
                </div>
            ) 
        }
    }
    //输入框组件的创建
    class Ipt extends React.Component{
        render() {
            return(
                <div className="ipt">
                    <textarea placeholder="请输入评论的内容"></textarea>
                    <button>发表评论</button>
                </div>
            )
        }
    }
    //列表组建的创建
    class Lists extends React.Component{
        constructor(props) {
            super(props)
            this.state={
                items: ['内容一','内容二','内容三']
            }
        }
        render() {
            return(
                <React.Fragment>
                	//这里通过items数组的长度来表示显示与隐藏
                    <ul className="lists" style={{display: this.state.items.length>0?'block':'none'}}>
                        <li>{this.state.items[0]}</li>
                        <li>{this.state.items[1]}</li>
                        <li>{this.state.items[2]}</li>
                    </ul>
                    <p style={{display: this.state.items.length==0?'block':'none'}}>暂无内容</p>
                </React.Fragment>
            )
        }
    }
    ReactDOM.render(
        <Discuss/>,
        document.getElementById('app')
    )
    </script>

在这里插入图片描述

1.2react计时器写法

  <div id="app">

  </div>
  <script type="text/babel">
  class Clock extends React.Component{
    constructor(props){
      super(props)
      this.state={
        data:new Date().toLocaleTimeString()
        //把当前时间以字符串的形式进行显示
      }
    }
    //react的挂载区域相当于vue中的mouted
    componentDidMount() {
      setInterval(()=>{
        this.tick()
      },1000)
    }
    //定义事件改变state中的值使其重新渲染页面
    tick(){
    //改变steState的方法
      this.setState({
        data:new Date().toLocaleTimeString()
      })
    }
    render(){
      return(
        <div>
        {this.state.data}  
        </div>
      )
    }
  }

  ReactDOM.render(
    <Clock/>,
    document.querySelector("#app")
  )
  
  </script>

props的使用

react中组件之间的关系就两种
父子
非父子
props可以作为在react中父组件向子组件传值的一种形式

父子通信的步骤(重点):
1 在父组件中找到子组件标签 在子组件标签上边写上自定义属性名等于要传递的数据
<子组件标签名 自定义属性名=“要传递的数据”></子组件标签名>
2 在子组件的模板中 通过this.props.自定义属性名 来获取父组件向子组件传递的数据
{this.props.自定义属性名}

state与props关系区别
1 state你可以认为是用来设置组件的data数据
props是进行组件传值的
2 props是不可变的 但是state可以根据与用户的交互进行动态改变
我们需要通过state来更新或者修改数据
而子组件只能通过props来获取传递的数据

1、react封装的组件 是独立存在的 即便是同一个组件 被多次调用 但是之间保持独立的关系

注意
react自定义组件标签中不能直接写内容 写了也不显示
如果想要react组件标签中写的内容显示出来 我们需要给自定义的组件模板中使用 this.props.children
例如:
<自定义组件标签名>内容</自定义组件标签名>
// 内容可以是任意数据

            自定义组件的模板中使用 this.props.children
                return(
                    <div>{this.props.children}</div>
                )

子组件创建

   class Child extends React.Component{
        render() {
            return(
                <div className="child">
                {this.props.children}
				{this.props.name}
				{this.props.text}  
				{this.props.play}  
                </div>
            )
        }
    }

父组件创建

   class Parent extends React.Component{
        render() {
            return(
                <div className="parent">
                    parent--{this.state.msg}
                    <Child>
                        <div className="demo">demo测试</div>

                    </Child>
                    <Child name="张三" />
                    <Child name="李四" text="你好"/>
                    <Child name="王五" play="王者荣耀"/>
                    <Child name="马六"></Child>
                </div>
            )
        }
    }

结果显示如下
在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:30:39  更:2021-08-12 16:30:54 
 
开发: 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年11日历 -2024/11/26 9:46:52-

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