首页 > 其他分享 >React组件之间的通信方式总结(下)

React组件之间的通信方式总结(下)

时间:2022-12-12 10:02:04浏览次数:47  
标签:总结 react render React state props 组件

一、写一个时钟

  • 用 react 写一个每秒都可以更新一次的时钟
import React from 'react'
import ReactDOM from 'react-dom'


function tick() {
    let ele = <h1>{ new Date().toLocaleTimeString() }</h1>

    // Objects are not valid as a React child (found: Sun Aug 04 2019 20:34:51 GMT+0800 (中国标准时间)). If you meant to render a collection of children, use an array instead.
    // new Date() 是一个对象数据类型的值,React 元素不接收对象作为其子元素
    ReactDOM.render(ele, document.querySelector('#root'))
}

tick()

setInterval(tick, 1000) // 如果不包在一个函数中,时钟是不会每秒更新一次

但是 React 和 Vue 相同都是数据驱动的,但是这个时候和数据驱动没啥关系,每隔1秒钟重新创建一个 ele,然后再渲染到页面中,视图才发生变化;为了使用数据驱动,我们需要使用 React 的组件

二、React 的组件

在 React 组件中,jsx 元素(也称 react 元素)是组件的基本组成单位
在 react 中定义组件有两种方式:

  1. 函数(function)定义组件
  2. 类(class)定义组件
  • 定义组件的要求:
    1. 组件的名字首字母必须大写,为了在写 jsx 时区分原生 html 标签
    1. 组件定义后,就可以当做一个标签在 jsx 语法中使用
    1. 如果使用函数定义组件必须返回一个 jsx 元素

2.1 React 的函数组件

react 使用函数定义组件,就是声明一个函数;

  • 函数接收一个 props 参数;props 是对象,是在渲染或者父组件通过 prop(属性) 传递过来的数据;
  • 函数返回一个 jsx 元素,在组件中需要的数据可以通过 props 传入;
// 1. 函数定义组件
function Welcome(props) {
    // props 是一个对象,是使用组件时,写在组件行内的属性和属性值组成的;
    console.log(data)
    return (<div>
        <p>{props.data.name}; {props.data.age}</p>
        <p>{props.x}</p>
    </div>)
}

ReactDOM.render(<Welcome data={{name: 'mabin', age: 18}} x='hahah' />, document.querySelector('#root'));
  • ReactDOM.render() 会根据第一个参数的类型不同执行不同的操作;
    1. 如果是组件,当 render 执行时,首先会把当前组件的行内属性进行打包封装,把其封装成一个对象,把这个对象传给组件函数
    1. 执行组件函数,获取对应的虚拟 DOM 对象
    1. 把虚拟 DOM 转成真实 DOM 对象,并且插入到真实的 DOM 中

2.2 React 的 class 组件

通过 class 定义一个组件

  1. 通过 class 来定义一个组件,需要继承 React 上的 Component 这个类
  2. 在定义组件上的原型上必须有一个 render 函数,且 render 函数需要返回一个顶级的 jsx 元素

-看

标签:总结,react,render,React,state,props,组件
From: https://www.cnblogs.com/beifeng1996/p/16975295.html

相关文章

  • 如何使用 Towify 在小程序里实现使用菜单控制器控制两个组件切换?
    在某些使用场景下,你需要在菜单选项栏进行组件切换,例如底部导航栏、新手引导等场景。这时你可以使用菜单控制器和组件切换器配合来实现这一目的。效果展示:前置准备:一个......
  • React组件之间的通信方式总结(上)
    先来几个术语:官方我的说法对应代码ReactelementReact元素letelement=<span>A爆了</span>Component组件classAppextendsReact.Component{}无Ap......
  • react面试题合集
    何为reduxRedux的基本思想是整个应用的state保持在一个单一的store中。store就是一个简单的javascript对象,而改变应用state的唯一方式是在应用中触发actions,......
  • vim配置的学习与总结
    摘要有时候在linux里面操作需要使用粘贴以及其他处理.很多发行版,遇到#会自动退格,很难受.想着能够处理一下vim的默认设置可以好很多.所以这里简单总结一下.配......
  • 【秀米教程】变换组件的高级应用
    变换组件从“图1”变成“图2”,你会怎么做呢?图1图2插入一个新的时间轴,复制“图1”中的文字和图片到“图2”中?没错,我第一次也是这么想的......
  • vue3+element plus封装一个Drawer抽屉组件
    在开发中,我们经常使用vue2封装一些弹窗、抽屉组件,但是vue3的用法与vue2又不同,记录下本次使用vue3基于elementplus封装的一个抽屉组件开发思路是,关闭和打开抽屉组件的方......
  • 计算机科学概论与程序设计基础第十五周学习总结
    学号《计算机基础与程序设计》课程总结第一周学习总结https://www.cnblogs.com/ouyangmurong/p/16655008.html    第二周学习总结   第三周学习总结......
  • 2022-2023-1 20221413《计算机基础与程序设计》课程总结
    2022-2023-120221413《计算机基础与程序设计》课程总结作业信息这个作业属于哪个课程2022-2023-1-计算机基础与程序设计这个作业要求在哪里2022-2023-1计算机......
  • vue封装移动端日历选择和前后日期切换功能组件
    整体效果1.main.js文件引入element-ui(需要用install指令安装,这里不贴出来了)2.新建组件文件<template><divid="app"><divclass="choose-day-week-month-year-all">......
  • 周总结
    目录周总结12/11前端之JavaScriptJS基础js基本数据类型js运算符js流程控制js函数js内置函数前端之BOM、DOM操作BOM操作window对象location对象弹出框计时相关DOM操作查找标......