react组件化开发

news/2024/7/15 18:40:25 标签: react.js, javascript, 前端

项目实战中以组件化为主进行开发。

创建两个子组件(A,B)

javascript">javascript">import React, { Component } from "react";
class Leftbar extends Component {
  constructor(props) {
    super(props);
    this.state = {};
  }
  render() {
    return (
      <>
        <div>左侧组件</div>
      </>
    );
  }
}

export default Leftbar;
//假设这个是组件A,B

引入组件

javascript">javascript">//引入组件
import Leftbar from './components/Leftbar'
import Rightbar from './components/Rightbar';

挂载

javascript">javascript">     <>
        <Leftbar></Leftbar>
        <div>根组件</div>
        <Rightbar></Rightbar>
      </>
    //挂载的用法和html标签一致

注意:

javascript">javascript">组件引入
import leftbar from './components/Leftbar'  命名小写

组件的props


javascript">javascript">类组件存在自身维护的状态state,但是如果涉及组件化开发使用props属性进行传值。
props存在是为了解决组件间传值。

类组件中props的关系。

Component父类中存在:

extends继承之后class类组件中可以使用this.props访问props传值。

组件中使用props

javascript">javascript"> console.log(this.props); //默认为空对象

props的使用


class组件中的使用

javascript">javascript">子组件上直接定义属性即可
{/* 子组件上直接定义属性 */}
<Leftbar name="left"></Leftbar>

子组件中直接使用this.props获取父子传值。

javascript">javascript">render() {
    console.log(this.props);
    //获取props值
    let { name } = this.props;
    return (
      <>
        <div>{name}组件</div>
      </>
    );
  }

父子组件之间props静态传值:

javascript">javascript">{/* 子组件上直接定义属性  建议props属性采用小驼峰格式 */}
<Leftbar name="left" dataSource="[1,2,3]"></Leftbar>

父子组件之间props动态传值:

javascript">javascript">  <Leftbar dataSource={dataSource}></Leftbar>
  //动态传值
  //动态传递的数据如果是集合对象直接在子组件中渲染会导致报错。

备注:

javascript">javascript">父子传值静态+动态选择  (静态传值均为字符串解析)

组件中约束props


类型检测系统

javascript">javascript">prop-types
cnpm i --save-dev prop-types

//子组件中引入
import PropTypes from 'prop-types'
javascript">javascript">// 安装类型检测  propTypes
import PropTypes from "prop-types";
import "../assets/css/leftbar.css";
class Leftbar extends Component {
  constructor(props) {
    super(props);
    this.state = {};
  }
  render() {
    //获取props值
    let { name } = this.props;
    return (
      <>
        <div className="leftbar">{name}组件</div>
      </>
    );
  }
}

//类型检测
Leftbar.propTypes = {
  name: PropTypes.string,
};

如果组件传值和类型检测不一致

写法方式另一种在class类组件内部书写(es6class类的静态字段static)

javascript">javascript">  static propTypes={
    name:PropTypes.string
  }

组件中定义props默认值

javascript">javascript">定义默认值为了让自定义组件运行不报错。
//props定义默认值
Leftbar.defaultProps = {
  name: "A",
};

props只读


javascript">javascript"> this.props.name="测试";  修改props
javascript">javascript">组件props是只读的,只能读取不能修改。
 //获取props值---解构之后可修改props 但是和props没有直接关系。
let { name } = this.props;
name = "小花";

父子传值逆向传值


子到父传值

javascript">javascript">子组件中定义父子props传值属性
//类型检测
Leftbar.propTypes = {
  dataSource: PropTypes.array,
  onBindIndex: PropTypes.func,
};
//定义props默认值
Leftbar.defaultProps = {
  dataSource: [],
  onBindIndex: () => {},
};
//onBindIndex 该属性为函数值
//父向子传值传函数
//子接收父的函数执行可以逆向传值。

http://www.niftyadmin.cn/n/153574.html

相关文章

操作系统(第七节) ---文件及 IO 操作

文件及 IO 操作1 File 文件的常用基本操作2 字符流和字节流2.1 字节输出流与输入流2.2 字符输出流与输入流2.3 关于字节流和字符流的区别3 文件的拷贝的几个版本1 File 文件的常用基本操作 针对文件的操作, 主要以代码的形式演示, 比较简单, 记住即可; public static void mai…

【设计模式】 1、状态模式

文章目录一、背景二、结构2.1 播放器案例2.2 自动售货机三、使用场景四、实现方式五、优缺点一、背景 现实世界&#xff0c;若物体只存在有限状态&#xff0c;且状态改变时&#xff0c;物体行为随之改变&#xff0c;则需用「状态模式」描述。 下文举例&#xff0c;例如有某文档…

阶段二14_面向对象高级_多态1

昨日复习&#xff1a; 什么是继承 让类与类之间产生了子父类关系继承的好处是 提高代码的复用性和维护性java中继承的特点是 只支持单继承、不支持多继承&#xff0c;但是可以多层继承四种权限修饰符是 public protected 默认 privatefinal关键字的特点是 修饰类&#xff1a;类…

家庭网络分析

1. 网线到家&#xff0c;连接光猫 简单来说&#xff0c;光猫就是一个信号转换器&#xff0c;它将互联网服务提供商的信号转换为家庭网络所能识别的信号&#xff0c;使得家庭网络能够与互联网连接并通信。 2. 光猫的接口 光口&#xff08;光纤接口&#xff09;用于接收宽带信…

排列组合(STL算法中next_permutation和prev_permutation剖析)

STL提供了两个用来计算排列组合关系的算法&#xff0c;分别是next_permucation和prev_permutation。解决全排列问题。首先我们必须了解什么是“下一个”排列组合,什么是“前一个”排列组合。考虑三个字符所组成的序列{a,b, c)。这个序列有六个可能的排列组合: abc&#xff0c;a…

60行代码,制作H5版飞机大战游戏

用最基础的代码逻辑&#xff0c;实现了飞机大战的核心玩法 点击这里可以试玩欧 制作使用了PIXI框架&#xff0c;对于制作H5应用的运行效率优化的还算不错。 感兴趣可以一起研究 制作了如下功能 1、制作了游戏的场景元素及动画效果 2、飞机的控制 3、发射子弹击落敌机&…

C++ STL 函数对象的基本使用 一元谓词和二元谓词 find_if和sort源码解析

STL- 函数对象 文章目录STL- 函数对象1 函数对象1.1 函数对象概念1.2 函数对象使用2. 谓词2.1 谓词概念2.2 一元谓词2.3 二元谓词1 函数对象 1.1 函数对象概念 概念&#xff1a; 重载函数调用操作符的类&#xff0c;其对象常称为函数对象函数对象使用重载的()时&#xff0c;…

Python如何打包exe文件?如何换成喜欢的图标?

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 今天又想来分享一个Python打包exe文件的教程&#xff01;&#xff01;这次是最强终极版~~~~ 在我们代码写好后&#xff0c;分享给不会编程的朋友时&#xff0c;总会遇到许许多多的的问题 这个时候&#xff0c;知道怎么…