React TypeScript 定义组件的各种方式

2023-11-08

举例说明

比如我们要定义一个计数器 Counter,它包含一个 label 和一个 button,计数器的初始值由外部传入,点击 button 计数加 1:

在这里插入图片描述

这虽然是个简单组件,但却包含了 React 定义组件的两大核心点:

  1. 属性由外部传入
  2. 状态由内部控制

组件样式:

// counter样式
const counterStyle = {
  backgroundColor: "orange",
  width: "100px",
  height: "100px",
  borderRadius: "10px",
  display: "flex",
  flexDirection: "column",
  alignItems: "center",
  justifyContent: "center",
} as React.CSSProperties;

使用组件:

<Counter initialCount={6} />

1. 使用 class 定义

// 属性
type Props = {
  // 初始count
  initialCount: number;
};

// 状态
type State = {
  count: number;
};

// 计数器
class Counter extends Component<Props, State> {
  constructor(props: Props) {
    super(props);
    this.state = {
      count: props.initialCount,
    };
  }

  render() {
    return (
      <div style={counterStyle}>
        <p>count={this.state.count}</p>
        <button
          onClick={() => {
            this.setState({
              count: this.state.count + 1,
            });
          }}
        >1
        </button>
      </div>
    );
  }
}

2. 使用函数定义

2.1 使用普通函数

// 属性
type Props = {
  // 初始count
  initialCount: number;
};

// 计数器
function Counter(props: Props) {
  const [count, setCount] = useState(props.initialCount);
  return (
    <div style={counterStyle}>
      <p>count={count}</p>
      <button
        onClick={() => {
          setCount(count + 1);
        }}
      >1
      </button>
    </div>
  );
}

注:此函数返回的类型是 JSX.Element

2.2 使用函数组件

// 属性
type Props = {
  // 初始count
  initialCount: number;
};

// 计数器
const Counter = (props: Props) => {
  const [count, setCount] = useState(props.initialCount);
  return (
    <div style={counterStyle}>
      <p>count={count}</p>
      <button
        onClick={() => {
          setCount(count + 1);
        }}
      >1
      </button>
    </div>
  );
};

注:此函数返回的类型是 JSX.Element
若需要,可以指定函数返回的具体类型:

// 属性
type Props = {
  // 初始count
  initialCount: number;
};

// 计数器
const Counter: React.FC<Props> = (props) => {
  const [count, setCount] = useState(props.initialCount);
  return (
    <div style={counterStyle}>
      <p>count={count}</p>
      <button
        onClick={() => {
          setCount(count + 1);
        }}
      >1
      </button>
    </div>
  );
};

此时函数的返回值类型是 React.FC<Props>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React TypeScript 定义组件的各种方式 的相关文章

随机推荐

  • 论文阅读_扩散模型_DM

    英文名称 Deep Unsupervised Learning using Nonequilibrium Thermodynamics 中文名称 使用非平衡热力学原理的深度无监督学习 论文地址 http arxiv org abs 1503
  • NTC PTC 压敏电阻 在电源电路中的作用

    NTC PTC 压敏电阻 在电源电路中的作用 来自dianyuan com 问题1 NTC电阻串联在交流电路中主要是起什么作用 它是怎样工作 请大侠指点 谢谢 问题2 压敏电阻并联在交流侧电路中主要是起什么作用 它是怎样工作 如果没有以上两
  • 理解DALL·E 2, Stable Diffusion和 Midjourney工作原理

    原文 理解DALL E 2 Stable Diffusion和 Midjourney的工作原理 知乎 者按 随着AIGC的兴起 各位小伙伴们对文生图工具DALL E 2 Stable Diffusion和Midjourney一定并不陌生 本
  • word转换成pdf,包括导航目录和图片不变黑

    1 word转换成pdf 包括导航目录和图片不变黑 有些时候将word转换成pdf 我们会发现生成的文件要么不带导航目录 要么就是图片显示有问题 比如变黑 变黑是因为某些图片在作图时修改了透明度 因此转换时会被转换为黑色 下面来说说解决办法
  • UDP之多播/组播

    目录 一 什么是多播 组播 为什么出现多播 组播 二 组播地址 三 主机网卡对应的编号 ifconfig命令 ip ad ip adress 获取网卡对应的编号 四 多播实现 一 什么是多播 组播 为什么出现多播 组播 由上节课讲到的广播
  • imu内参标定,从数据录制到标定结果过程记录

    一 准备录制 这部分内容主要参考了博主 huawwenwnewn 的文章http t csdn cn yvkdz 非常感谢 1 建立工作空间在imu data cpp 写入以下内容 mkdir p publish ws src cd pub
  • 永磁同步电机矢量控制到无速度传感器控制学习教程(PMSM)(一)

    一个阶段的学习结束了 整理了之前的过程中的学习成果 已经过了工作的年纪 在这里稍微出一下自己做的一套永磁同步电机的教程 从基础的矢量控制 到应用性较强的MTPA 弱磁控制等 最后深入到无速度传感器的控制 搜集了三种无速度的方法 足够大家从基
  • C语言 define

    本文结合 C Primer Plus 和网上的资料 c c 中define用法详解及代码示例 MachineChen的博客 CSDN博客 define在c语言中用法 对C语言中的define做一个总结 每行 define 逻辑行 都由3部分
  • string[]数组转为int[]数组方法

    string arrTemp 22 23 222 int intArray intArray Array ConvertAll
  • 嵌入式 Linux 入门(四、Linux 下的编辑器 — 让人爱恨交加的 vi )

    大家好 是矜辰所致 嵌入式 Linux入 门第四课 了解 Linux 下的编辑器 掌握 vi 编辑器的使用 目录 前言 一 Linux 下的编辑器 1 1 gedit 编辑器 1 2 Vi 编辑器 font color 0033FF 1 3
  • leetcode:2023/4/7

    1040 移动石子直到连续II class Solution public int numMovesStonesII int stones int n stones length Arrays sort stones if stones n
  • 关于数据库中FK的简单理解以及应用

    问题来源 思考如果有两张表 应该以什么样的方式将两者关联起来 直接用两个表中的字段进行关联 还是使用第三张关系表进行关联 说明 FK foreign key PK primary key 注 下面提到的 一对一 一对多 多对一 是指一个表的
  • Centos系统常见配置(详细)总结

    目录 一 简介 二 具体内容 1 设置静态ip 2 重启网络 3 ssh登录时自动运行命令 4 新增用户并创建家目录 5 终端显示bash 4 2 6 更换yum源 7 centos系统串口终端自动登陆 8 系统启动通过rc local自动
  • Mysql Sql查询之Limit 用法

    面试题 你知道mysql 中limit的用法吗 你是怎么使用的 在一条sql语句中 limit 1 表示什么 limit 1 3 又是什么意思 这道题本人答的很烂 在mysql中 limit关键字主要用于指定查询结果从哪条记录开始显示 一共
  • java流与文件——读写二进制数据(DataOutput + DataInput)

    0 README 0 1 本文描述转自 core java volume 2 旨在理解 java流与文件 读写二进制数据 DataOutput DataInput 的相关知识 0 2 for complete my diy code ple
  • 树莓派3B+内核编译

    获取内核源码 https github com raspberrypi 选着linux工程代码 https github com raspberrypi linux 版本分支选择rpi 4 14 y 获取内核配置文件 如果已经有内核配置文件
  • ChatGPT的各项超能力从哪儿来?万字拆解追溯技术路线图来了

    作者 符 尧 彭昊 Tushar Khot 郭志江等 符尧 yao fu ed ac uk 爱丁堡大学 University of Edinburgh 博士生 本科毕业于北京大学 他与彭昊 Tushar Khot在艾伦人工智能研究院 All
  • 使用postman实现文件上传与下载

    文件上传 1 设置KEY值为Content Type VALUE值为multipart form data 2 选择Body 类型为form data KEY值下拉选择为file 这样VALUE就会出现选择按钮 最重要的是 KEY值的fil
  • 黑盒测试和白盒测试定义及区别

    简单了解一下黑盒测试和白盒测试 一 定义 1 1黑盒测试 黑盒测试又称为功能测试 主要检测软件的每一个功能是否能够正常使用 在测试过程中 将程序看成不能打开的黑盒子 不考虑程序内部结构和特性的基础上通过程序接口进行测试 检查程序功能是否按照
  • React TypeScript 定义组件的各种方式

    目录 举例说明 1 使用 class 定义 2 使用函数定义 2 1 使用普通函数 2 2 使用函数组件 举例说明 比如我们要定义一个计数器 Counter 它包含一个 label 和一个 button 计数器的初始值由外部传入 点击 bu