• React 中 使用 ts


    react中使用ts,难点在于定义数据类型接口和对传入的数据进行校验。

    icon.tsx

    import React from 'react';
    const Icon = ({ name, ...restProps}) => {
        return (
            <svg {...restProps}>
                <use xlinkHref={`#${name}`}/>
            </svg>
        );
    };
    export default Icon;

    index.tsx

    import * as React from 'react';
    import ReactDom from 'react-dom';
    import Icon from './icon/icon';
    
    const fn =  (e) => {
      console.log((e))
    };
    
    ReactDom.render(
      <Icon name='wechat'/>, 
      document.getElementById('root')
    );

    然后对传入的name进行类型确定
    icon.tsx

    import React from 'react';
    
    interface IconProps{
       name: string;
    }
    
     const Icon: React.FunctionComponent<IconProps>  // React.FunctionComponent为对icon组件的类型测试,后面是传入的值的类型
    =({ name, ...restProps})=> {
        return (
            <svg {...restProps}>
                <use xlinkHref={`#${name}`}/>
            </svg>
        );
    };
    
    export default Icon;

    当然在传值的过程不只传个静态数据,还可能会传个事件,事件的类型判断和静态数据的不一样, 事件的类型判断如下:

    interface IconProps extends React.SVGAttributes<SVGElement> {
        name: string;
        onClick: React.MouseEventHandler<SVGElement>
    }

    当然,传入的事件也需要进行一下类型判断:

    const fn: React.MouseEventHandler<SVGAElement | SVGUseElement> = (e) => {
      console.log((e.target as HTMLDivElement))
    };

    原文出自:https://www.jianshu.com/p/9e08341d2967

  • 相关阅读:
    网络CCNA基础了解
    KVM 安装 VMware 虚拟机
    [转载]JS浏览器兼容性问题
    java中数组是不是对象?
    [转载]request.getServletPath()方法
    weblogic下更改jsp不生效的解决办法
    java之args[0]
    docker小demo
    eclipse优化
    [转载]oracle建表语句大全
  • 原文地址:https://www.cnblogs.com/art-poet/p/12929949.html
Copyright © 2020-2023  润新知