React 与 TS 结合使用时组件传参总结

在学习 React 时,我们总会遇到在 TS 和 JS 之间切换来开发多个项目,而有时会忘记 TS 的语法,所以编写一下 React 结合 TS 开发时的一些总结知识点,以便后续回顾用。

向组件传递基础参数(字符串、数字和布尔值)

这节主要是介绍一下在 React + TS 中如何实现组件传递基础类型的参数。具体实例如下:

typescript 复制代码
type BasePropData = {
  name: string;
  age: number;
  isGraduate: boolean;
};

const BaseProps: React.FC<BasePropData> = ({ name, age, isGraduate }) => {
  return (
    <div>
      <h2>传递基础参数实例</h2>
      <p>name: {name}</p>
      <p>age: {age}</p>
      <p>isGraduate: {isGraduate ? "是" : "否"}</p>
    </div>
  );
};

export default BaseProps;

向组件传递对象参数(数组、对象和多值情况)

这节主要是介绍一下在 React + TS 中如何实现组件传递数组、对象和联合类型的的参数。具体实例如下:

typescript 复制代码
type StudentProps = {
  id: number;
  name: string;
  age: number;
};

type ObjectPropsData = {
  students: StudentProps[];
  classInfo: {
    no: string;
    name: string;
    roomNo: string;
    studentCount: number;
    grade: "初一" | "初二" | "初三";
  };
};

const ObjectProps: React.FC<ObjectPropsData> = (props) => {
  return (
    <div>
      <h2>传递对象参数实例</h2>
      <div>
        <h4>班级信息</h4>
        <hr />
        <p>年级编号:{props.classInfo.no}</p>
        <p>年级名称:{props.classInfo.name}</p>
        <p>教室编号:{props.classInfo.roomNo}</p>
        <p>学生数量:{props.classInfo.studentCount}</p>
        <p>班级年级:{props.classInfo.grade}</p>
      </div>
      <div>
        <h4>学生姓名</h4>
        <hr />
        {props.students.map((item) => (
          <p>
            姓名:{item.name} 年龄:{item.age}
          </p>
        ))}
      </div>
    </div>
  );
};

export default ObjectProps;

向组件传递 children 参数

这节主要是介绍一下在 React + TS 中如何实现组件传递 children 的参数。具体实例如下:

typescript 复制代码
// children参数为字符串
type ChildrenPropsData = {
  children: string;
};

const ChildrenStringProps: React.FC<ChildrenPropsData> = (props) => {
  return (
    <div>
      <h2>组件传递 children 参数实例</h2>
      <p>{props.children}</p>
    </div>
  );
};

// children参数为React.Node
type ChildrenReactNodePropsData = {
  children: React.ReactNode;
};

const ChildrenReactNodeProps: React.FC<ChildrenReactNodePropsData> = (
  props
) => {
  return (
    <div>
      <h2>组件传递 children 参数实例</h2>
      {props.children}
    </div>
  );
};

向组件传递事件和样式参数

这节主要是介绍一下在 React + TS 中如何实现组件传递事件和样式参数。具体实例如下:

  • 事件参数实例

    这里只是列举两个事件类型的传参实例,每个事件在 Ts 中的声明可以参考如下信息:

typescript 复制代码
//
type EventPropsData = {
  value: string;
  handleChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
  getInputVal: (event: React.MouseEvent<HTMLButtonElement>, id: string) => void;
};

const EventProps: React.FC<EventPropsData> = ({
  value,
  handleChange,
  getInputVal,
}) => {
  return (
    <div>
      <h2>组件传递 事件 参数实例</h2>
      <input type="text" value={value} onChange={handleChange} />
      <button onClick={(event) => getInputVal(event, value)}>Click</button>
    </div>
  );
};

export default EventProps;
  • 样式参数实例
typescript 复制代码
type StylePropsData = {
  styles: React.CSSProperties;
};

const StyleProps: React.FC<StylePropsData> = ({ styles }) => {
  return (
    <div>
      <h2>组件传递 样式 参数实例</h2>
      <div style={styles}>这里是传入的参数样式</div>
    </div>
  );
};

export default StyleProps;

向组件中传入组件参数

这节主要是回顾,组件传入的参数为组件时的 TS 写法。具体实例如下:

typescript 复制代码
// Profile.tsx
export type ProfileProps = {
  name: string;
};

export const Profile = ({ name }: ProfileProps) => {
  return <div>Private Profile component. Name is {name}</div>;
};

// Private.tsx
type PrivateProps = {
  isLoggedIn: boolean;
  Component: React.ComponentType<ProfileProps>; // 因为我们制定传入的组件需要带有一个name属性,所以我们这里采用了TS的泛型来定义组件的参数
};

export const Private = ({ isLoggedIn, Component }: PrivateProps) => {
  if (isLoggedIn) {
    return <Component name="Vishwas" />;
  } else {
    return <Login />;
  }
};
相关推荐
hunteritself15 小时前
GPT Image2 + Seedance 2.0:3 小时从剧本到 AI 互动影游,深度实测复盘
前端·数据库·人工智能·深度学习·transformer
谙弆悕博士15 小时前
Python快速学习——第5章:集合
python·学习
独秀不如众秀15 小时前
前端页面引擎协议:由浅入深——从 30 行到 vform3 的演化之路
前端
学网安的肆伍16 小时前
【044-WEB攻防篇】PHP应用&SQL盲注&布尔回显&延时判断&报错处理&增删改查方式
前端·sql·php
南境十里·墨染春水16 小时前
linux学习进展 C语言连接mysql
linux·c语言·学习
八号当铺16 小时前
从 Prompt 到 AI 工程化:理解 Rules、Skills 与 Agent
前端·ai编程·cursor
didadida26216 小时前
子路径部署 Vue/React 应用偶发白屏
前端·后端
invicinble16 小时前
前端框架使用vue-cli (第五层:构建打包层--总体层介绍)
前端·vue.js·前端框架
沉浸式学习ing16 小时前
网课视频里的PPT怎么提取?视频转图文讲义的实操教程
笔记·ai·aigc·学习方法·视频·ppt
前端那点事16 小时前
Vuex刷新数据丢失?4种持久化方案全覆盖,从零到项目落地(实战完整版)
前端·vue.js