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


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

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

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

    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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

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

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

    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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    向组件传递 children 参数

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

    // 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>
      );
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

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

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

    • 事件参数实例

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

    //
    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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 样式参数实例
    type StylePropsData = {
      styles: React.CSSProperties;
    };
    
    const StyleProps: React.FC<StylePropsData> = ({ styles }) => {
      return (
        <div>
          <h2>组件传递 样式 参数实例</h2>
          <div style={styles}>这里是传入的参数样式</div>
        </div>
      );
    };
    
    export default StyleProps;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    向组件中传入组件参数

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

    // 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 />;
      }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 相关阅读:
    JWT认证漏洞攻击详解总结
    java web:springboot mysql开发的一套家政预约上门服务系统源码:家政上门服务系统的运行流程
    TikTok Shop新结算政策:卖家选择权加强,电商市场蓄势待发
    uniapp 切换 history 路由模
    【Linux基础】第26讲 Linux 查找和过滤命令(一)——find命令
    带权并查集模板
    【Node.js】数据库配置与操作、Session实现原理、JWT实现原理:
    2022 最新的 Java 八股文合集来了,彻底解决各大大厂面试难题
    【构建ML驱动的应用程序】第 7 章 :使用分类器编写推荐
    2024前端面试准备之HTML篇
  • 原文地址:https://blog.csdn.net/qq_33003143/article/details/132778146