返回顶部
首页 > 资讯 > 前端开发 > JavaScript >react常见的ts类型实践解析
  • 936
分享到

react常见的ts类型实践解析

react常见的ts类型reactts类型 2023-05-16 14:05:00 936人浏览 安东尼
摘要

目录正文在dom节点上的类型传入子组件的方法!非空断言,一定有该方法或者属性一个doms上的类型导入一个组件需要的多个类型选择一个组件的指定的几个属性总结正文 ts在中在Reac

正文

ts在中React用处很是很广泛,本文是一篇关于在react中常用的类型总结,希望能带来一些思考和帮助。

import React from "react";
type Props = {
}
const Header: React.FC<Props> = (props) => {
  return (<>
    <div>header</div>
    {props.children}
  </>)
}

我们注意在Header组件中有使用到props.children如果Props没有申明类型那么此时就会报这样的错误

此时我们需要加个类型就行,并且children是可选的

import React from "react";
interface Props {
  children?: React.Reactnode;
}

除了children,有时我想给Header组件传入一个className,并且是可选的

import React from "react";
type Props = {
 children?: React.ReactNode;
 className?: string;
}
const Header: React.FC<Props> = (props) => {
  const { className } = props;
  return (<>
    <div className={`App-header ${className}`}>header</div>
    {props.children}
  </>)
}

Props我们似乎对每一个可选项都有做?可选,有没有一劳永逸的办法

Partial<T>所有属性都是可选

import React from "react";
type Props = {
 children: React.ReactNode;
 className: string;
}
const Header: React.FC<Partial<Props>> = (props) => {
  const { className = '' } = props;
  return (<>
    <div className={`App-header ${className}`}>header</div>
    {props.children}
  </>)
}

在以上我们给Props申明了一个children?: React.ReactNode,如果你不想这么写,react也提供了一个属性PropsWithChildren

interface ChildProps {}
export const SubHeader: React.FC = (
  props: PropsWithChildren<{}> & Partial<ChildProps>
) => {
  return <div className={`sub-header`}>{props.children}</div>;
};

在dom节点上的类型

import React, { PropsWithChildren, useRef } from "react";
const Input: React.FC = () => {
  const inputRef = useRef<htmlInputElement>(null);
  const sureRef = useRef<HTMLDivElement>(null);
  return (
    <>
      <input type="text" ref={inputRef} />
      <div ref={sureRef}>确定</div>
    </>
  );
};

传入子组件的方法

我想传入一个方法到子组件里去

type InputProps = {
  onSure: () => void;
};
const Input: React.FC<InputProps> = (props) => {
  const inputRef = useRef<HTMLInputElement>(null);
  const sureRef = useRef<HTMLDivElement>(null);
  return (
    <>
      <input type="text" ref={inputRef} />
      <div ref={sureRef} onClick={props?.onSure}>
        确定
      </div>
    </>
  );
};
const Index: React.FC<Partial<Props>> = (props) => {
  const { className } = props;
  const handleSure = () => {};
  return (
    <header className={`App-header ${className}`}>
      <Input onSure={handleSure} />
      {props.children}
    </header>
  );
};

!非空断言,一定有该方法或者属性

  const body = document!.getElementsByTagName("body")[0];
  body.addEventListener("click", () => {
    console.log("body");
  });

一个doms上的类型

sure按钮上用ref绑定一个dom

const Input: React.FC<InputProps> = (props) => {
  const inputRef = useRef<HTMLInputElement>(null);
  const sureRef = useRef(null);
  const body = document!.getElementsByTagName("body")[0];
  body.addEventListener("click", () => {
    console.log(sureRef.current?.style);
    console.log("body");
  });
  return (
    <>
      <input type="text" ref={inputRef} />
      <div ref={sureRef} onClick={props?.onSure}>
        确定
      </div>
    </>
  );
};

此时我们需要给sureRef申明类型,并且?访问可选属性

const inputRef = useRef<HTMLInputElement>(null);
const sureRef = useRef<HTMLDivElement>(null);
const body = document!.getElementsByTagName("body")[0];
body.addEventListener("click", () => {
  console.log(sureRef.current?.style);
  console.log("body");
});

导入一个组件需要的多个类型

// userInterfence.ts
export type UserInfo = {
  name: string;
  age: number;
};
export type Menu = {
  title: string;
  price: number;
  isChecked: boolean;
  items: Array<{
    name: string;
    price: number;
  }>;
};

在另外一个组件引入

import type { UserInfo, Menu } from "./userInterfence";
const Input: React.FC<InputProps> = (props) => {
  const [userInfo, setUserInfo] = useState<UserInfo>({
    name: "WEB技术学苑",
    age: 10,
  });
  const inputRef = useRef<HTMLInputElement>(null);
  const sureRef = useRef<HTMLDivElement>(null);
  const body = document!.getElementsByTagName("body")[0];
  body.addEventListener("click", () => {
    console.log(sureRef.current?.style);
    console.log("body");
  });
  return (
    <>
      <input type="text" ref={inputRef} value={userInfo.name} />
      <input type="text" value={userInfo.age} />
      <div ref={sureRef} onClick={props?.onSure}>
        确定
      </div>
    </>
  );
};

选择一个组件的指定的几个属性

在两个类似的组件,我们有一些公用的属性,此时我们的类型可以借用Omit去掉一些不需要的属性类型

import type { UserInfo, Menu } from "./userInterfence";
const MenuComp: React.FC<Omit<Menu, "items" | "isChecked">> = (props) => {
  return (
    <>
      <p>{props.price}</p>
      <p>{props.title}</p>
    </>
  );
};

header组件中引入

<header className={`App-header ${className}`}>
    <MenuComp price={10} title={"menuA"} />
    {props.children}
  </header>

或者你可以使用Pick来选择指定的属性

import type { UserInfo, Menu } from "./userInterfence";
const MenuSubComp: React.FC<Pick<Menu, "items">> = (props) => {
  return (
    <>
      <p>{props.items[0].name}</p>
      <p>{props.items[0].price}</p>
    </>
  );
};

另一个组件中使用

const Index: React.FC<Partial<Props>> = (props) => {
  const { className } = props;
  const subInfo: Pick<Menu, "items"> = {
    items: [
      {
        name: "Web技术学苑",
        price: 10,
      },
    ],
  };
  return (
    <header className={`App-header ${className}`}>
      <MenuComp price={10} title={"menuA"} />
      <MenuSubComp items={subInfo.items} />
      {props.children}
    </header>
  );
};

总结

react高频常用的ts,比如如何申明一个组件的返回的类型,以及接收props的参数

如何申明一个dom上的类型,以及如何传入一个函数到子组件的类型

!?的使用,当我们知道一定有该属性时,你可以使用!,如果一个属性是可选的那么就用?

OmitPick在组件中的使用,更多typescript参考官方文档学习

本文code example

以上就是react常见的ts类型实践解析的详细内容,更多关于react常见的ts类型的资料请关注编程网其它相关文章!

--结束END--

本文标题: react常见的ts类型实践解析

本文链接: https://lsjlt.com/news/209961.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • react常见的ts类型实践解析
    目录正文在dom节点上的类型传入子组件的方法!非空断言,一定有该方法或者属性一个doms上的类型导入一个组件需要的多个类型选择一个组件的指定的几个属性总结正文 ts在中在reac...
    99+
    2023-05-16
    react常见的ts类型 react ts类型
  • react常见的ts类型怎么定义
    本篇内容主要讲解“react常见的ts类型怎么定义”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“react常见的ts类型怎么定义”吧!一个函数组件import React f...
    99+
    2023-07-06
  • 前端React Nextjs中的TS类型过滤实用技巧
    目录自我介绍分步介绍开胃小菜keyofinConditional泛型正餐开始实战应用例子最后大家好,我是零一,相信大家在阅读同事写的代码或者优秀的开源库的代码时,一定见过各种各样的风...
    99+
    2024-04-02
  • Oracle中常见的索引类型及最佳实践分享
    Oracle中常见的索引类型及最佳实践分享 在Oracle数据库中,索引是提高查询性能的重要机制之一。合理地设计和使用索引可以加快查询速度,优化数据库性能。本文将介绍Oracle中常见...
    99+
    2024-03-10
    唯一 多列 索引类型: b树
  • PHP中常见的错误类型解析及解决方法
    《PHP中常见的错误类型解析及解决方法》 PHP作为一种广泛应用的服务器端脚本语言,常常会遇到各种错误。在开发过程中,遇到错误是不可避免的,了解这些错误的类型、原因以及解决方法对于开发...
    99+
    2024-04-02
  • 常见的MySQL锁类型
    MySQL 中常见的锁类型,需要具体代码示例导言:在数据库中,当多个客户端同时对同一数据进行读取或修改时,会出现并发操作的问题。为了保证数据的一致性和完整性,数据库引擎采用了锁机制来控制对共享数据的访问。MySQL 作为一种常用的关系型数据...
    99+
    2023-12-21
    - 行锁 - 读锁 (共享锁) - 写锁 (排他锁)
  • react+ts实现简单jira项目的最佳实践记录
    练手的一套项目 react+ts 虽然内容较少,但是干货挺多,尤其是对hooks的封装,ts的泛型的理解,使用更上一层楼 项目代码:https://gitee.com/fine509...
    99+
    2024-04-02
  • TS中的类型推断与放宽实例详解
    目录简介类型推断与放宽概念常规类型推断最佳通用类型按上下文归类类型放宽常规类型放宽非严格类型检查模式严格类型检查模式字面量类型放宽对象、数组字面量类型的放宽类字面量类型的放宽函数返回...
    99+
    2024-04-02
  • Python异常之常见的Bug类型解决方法
    目录一、粗心导致的语法错误SyntaxError1、input输入报错2、循环语句报错3、赋值报错二、知识不熟练导致的错误Bug1、索引越界问题 IndexError2、append...
    99+
    2024-04-02
  • C++ 函数返回值类型的常见类型
    c++++ 函数返回类型包括:void(无返回值)、基本类型(整数、浮点数、字符和布尔值)、指针、引用、类和结构。选择时,应考虑功能、效率和接口。如计算阶乘的 factorial 函数,...
    99+
    2024-04-12
    函数 返回值 c++
  • React+Typescript常见的问题和技巧实例分析
    这篇“React+Typescript常见的问题和技巧实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“React+Ty...
    99+
    2023-07-02
  • 为Vue3 组件标注 TS 类型实例详解
    目录为 props 标注类型使用 <script setup>非 <script setup>为 emits 标注类型使用 <script setup&...
    99+
    2022-11-13
    Vue3 组件标注 TS 类型 Vue3标注TS
  • 解析HTML响应式布局的最佳实践和常见问题
    HTML响应式布局的最佳实践和常见问题解析 简介: 在当代互联网时代,移动设备的普及与发展,给用户提供了更多的移动端浏览网页的需求。为了解决不同屏幕尺寸的设备上能够有更好的用户体验,响应式布局成为了前端开发中重要的技术之一。本文...
    99+
    2024-01-29
  • MySQL中常见的六个约束类型详解
    目录前言1. not null2. unique3. default4. primary key自增主键auto_increment5. foreign key6. check总结前...
    99+
    2024-04-02
  • C++中常见的数据类型问题详解
    C++中常见的数据类型问题详解,需要具体代码示例在C++中,数据类型是编程的基础。了解和正确使用不同的数据类型是编写高效,可靠代码的关键。在C++中,常见的数据类型包括整型,浮点型,字符型,布尔型和自定义类型。每个类型都有其自身的特点和用途...
    99+
    2023-10-22
    数据类型 (Data types) C++常见问题 (Common C++ Issues) 详解 (In-depth E
  • 深入了解Python中常见的数据类型
    Python数据类型详解:探索Python中的常见数据类型 引言:在Python编程语言中,数据类型是非常重要的概念。了解数据类型的特性以及如何正确使用它们,可以在编写Python程序时提高效率,减少错误。本文将详细探索Pyth...
    99+
    2024-01-20
    Python编程 常见数据类型
  • 深入了解PHP中常见的错误类型
    标题:深入了解PHP中常见的错误类型,需要具体代码示例 在编写PHP程序时,我们经常会遇到各种各样的错误。了解这些错误类型及其产生的原因,可以帮助我们更好地调试和优化代码。本文将深入探...
    99+
    2024-04-02
  • MySQL中布尔类型的常见问题解决
    MySQL中布尔类型的常见问题解决 在MySQL数据库中,布尔类型通常被表示为TINYINT(1),其中0代表false,1代表true。虽然布尔类型看似简单,但在使用过程中也可能会遇...
    99+
    2024-03-15
    布尔类型问题 布尔类型解决
  • Python常见的BUG类型有哪些
    今天小编给大家分享一下Python常见的BUG类型有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。错误类型 1:语法错误...
    99+
    2023-06-27
  • Python常见类型转换的小结
    目录一:常见类型的概念二:类型转换1,二进制,八进制,十进制,十六进制转换2,数值字符串转换3,字符串和字节byte转换4,报文数据包和其他类型的互转4.1 bin十六进制...
    99+
    2023-02-21
    Python常见类型转换 Python 类型转换
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作