React + Typescript领域初学者的常见问题和技巧(最新)

React + Typescript领域初学者的常见问题和技巧

创建一个联合类型的常量 Key

const NAME = {
  HOGE: "hoge",
  FUGA: "fuga"
} as const;
keyof typeof NAME
// => "HOGE" | "FUGA"

创建常量值的联合类型

typeof NAME[keyof typeof NAME]
// => "hoge" | "fuga"

沮丧

const { hoge, piyo } = router.query as {
  hoge: string;
  piyo: string;
};

强制向下

有危险,但是...

const { hoge, piyo } = router.query as unknown as {
  hoge: number;
  piyo: number;
};

Material-Extend UI 类型

基本上它是由命名约定“组件名+Props”提供的,所以使用它。

type ExtendsProps = TextFieldProps & {
  hoge: number;
};

使用 Material-UI 属性类型

TextField 的类型TextFieldProps可以被继承,但是如果你想使用它的 name 属性

type Props = {
  name: TextFieldProps["name"];
};

常用注释前缀注解注释(FIXME、TODO等)

在 VSCode 中,可以通过设置一个插件如 todo-tree 来高亮显示并在列表中查看。

评论 意义
FIXME: 有缺陷的代码。我有强烈的意愿去解决它。
TODO: 该怎么办。比 FIXME 弱。要修复的功能。
NOTE: 在强调实现的意图以及为什么要这样写的时候写。
HACK: 我想重构。
REVIEW: 需要审查或查看。
WARNING: 当心。

什么是假的

False、undefined、null、NaN、0等,分别为真/假值,为假。

一切请参考 MDN。

// false, undefined, null, NaN, 0などのときは以下のエラーログを出力する
if (!hoge) {
  console.error("hoge がありません");
}
console.log(hoge);

突然||这是什么?

一个常见的条件分支OR
当左侧为Falsy时,使用连续计算右侧表达式的特性。
(下面的代码"HOGE"Truthy
也就是说,如果 hoge 是 Falsy,"HOGE"可以输出到屏幕上。

const HogeComponent = ({ hoge }) => {
  return <div>{hoge || "HOGE"}</div>;
};
const a1 = false || "hoge"; // f || t returns "hoge"
const a2 = "hoge" || false; // t || f returns "hoge"

什么是突然&&?

一个常见的条件分支AND
当左侧为Truthy时,使用连续计算右侧表达式的特性。
也就是说,如果 loading 是 Truthy(页面正在加载),则 Loading 组件打算将其打印到屏幕上。

const HogeComponent = ({ loading, hoge }) => {
  return (
    <>
      {loading && <Loading />}
      <Typography>{hoge}</Typography>
    </>
  );
};

?和??是什么

可选链 ?.
如果引用为 null(null 或 undefined),则表达式被缩短并返回 undefined 而不是错误。

空合并运算符 ??
如果左侧为空,则返回右侧的值,否则返回左侧的值。

  • 如果用户未定义,则返回未定义
  • 当 user 中包含的属性 hoge 为 null 或 undefined 时显示“hoge”
const piyoList = userList?.map((user) => ({
  hoge: user?.hoge ?? "hoge",
  fuga: user?.fuga ?? "fuga",
  piyo: user?.piyo ?? "piyo",
}));

我应该如何正确使用 ?? 和 || ?

|| 运算符经常被混淆,因为它包含 ?? 运算符的判断。
undefined || 如果只想在null的时候做有限的判断,使用??操作符的好处是别人在看代码的时候更容易理解意图,根据情况,可能会出现无意的行为。可以想象。

不方便的例子

例如,当将数字 0 作为参数传递时,|| 是不合适的。(因为 Falsey 值包含 0)

假设有一个组件可以指定任意宽度,如下所示。

const WidthComponent = ({ width }) => {
  return <div style={{ minWidth: width || "400px" }}>横幅をきめる</div> };

如果调用此组件时指定宽度为 0,则始终应用 400px。这是因为 0 是 Falsy 并移至右侧的评估。

我想在函数中使用可选链

可以通过编写 functionName ?. () 来实现。
当然,多个可选链也可以一起使用。

const productName = product?.getName?.();

通过使用它,可以减少以下冗余描述。

const productName = product?.getName ? product.getName() : undefined;

我想在数组中使用可选链

const product = products?.[0]通过描述是可能的。
如果你想在数组索引之后有一个可选链,请在[]后面写?

const user = userList?.[3]?.hoge ?? "HOGE"

基于上述的小测验

const userList = [
  {hoge:"hoge1",piyo:"piyo1"},
  {hoge:"hoge2",piyo:"piyo2"},
  {hoge:"hoge3",piyo:"piyo3"},
]
const user = userList?.[3]?.hoge ?? "HOGE"
console.log(user); // 何が出るかな?

最好使用模板文字进行字符串连接的理论

虽然取决于站点,但使用模板文字进行字符串连接基本上更好。

const mergeString = (hoge: string, fuga: string, piyo: string) =>
  `${hoge}_${fuga}_${piyo}`;

上面箭头函数的写法没有return

可以编写箭头函数,以便可以省略花括号,并且不需要返回。
我曾经生成一个合适的密钥。

如果上述函数的范围适当,它将如下所示。

const mergeString = (hoge: string, fuga: string, piyo: string) => {
  return `${hoge}_${fuga}_${piyo}`;
};

合并数组

const hoge = [1, 2, 3];
const fuga = [4, 5, 6];
const piyo = [...hoge, ...fuga]; // => [1,2,3,4,5,6]

差异更新对象

const defaultValue = {
  hoge: "hoge",
  fuga: "fuga",
  piyo: "piyo",
};
const inputValue = {
  hoge: "hogehoge",
  fuga: "fugafuga",
};
const result = { ...defaultValue, ...inputValue };
// => {hoge: "hogehoge", fuga: "fugafuga", piyo: "piyo"}

将参数一起传递给组件

type HogeProps = {
  hoge: string;
  piyo: string;
};
export const Hoge: React.VFC<HogeProps> = (props) => {
  return (
    <>
      <ChildComponent {...props} />     </>   );
};

拆分分配可以用另一个名字来完成

在调用 Hooks 等时使用,其返回类型在同一层次结构的组件中是固定的。
这在使用 apollo 客户端的 FetchQuery 时经常出现。应该。

type Response = {
  loading:boolean;
  data: unknown;
}
const getResponse = ():Response => ({
  loading: true;
  data : {
    hoge: "hoge";
    fuga: "fuga";
  }
})
const {data, loading} = getResponse(); // 通常の分割代入
// 別名の分割代入
const {data: data2, loading: loading2} = getResponse()

拆分赋值也可以处理嵌套

也可以对嵌套的人进行拆分分配!

type APIResponse = {
  code: string;
  data: {
    hoge: string;
    fuga?: string;
    piyo?: string;
  }[];
};

const {
  code,
  data: [{ hoge, fuga, piyo }],
} = res; // res は APIResponse型とする

在最后

如果您有任何建议或者这是一件毫无意义的事情,请随时发表评论。

到此这篇关于React + Typescript领域初学者的常见问题和技巧的文章就介绍到这了,更多相关React Typescript常见问题内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 为react组件库添加typescript类型提示的方法

    以我自己的组件react-better-countdown为例, 首先在package.json里面添加types: types/index.d.ts, , 然后文件目录上添加对应文件夹和文件, 最后是index.d.ts文件的编写,具体看代码: import * as React from 'react'; interface CountdownProps { count?: number; dayText?: string | React.ReactElement; hourText?: s

  • typescript+react实现移动端和PC端简单拖拽效果

    本文实例为大家分享了typescript+react实现移动端和PC端简单拖拽效果的具体代码,供大家参考,具体内容如下 一.移动端 1.tsx代码 import { Component } from "react"; import './Tab.less' interface Props { } interface user { id: string, text: string } interface content { id: string, text: string } inter

  • React+Typescript实现倒计时Hook的方法

    首先对setInterval做了Hook化封装

  • 深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践

    前言 阿特伍德定律,指的是any application that can be written in JavaScript, will eventually be written in JavaScript,意即"任何可以用JavaScript来写的应用,最终都将用JavaScript来写" 在使用新技术的时候,切忌要一步一步的来,如果当你尝试把两门不熟悉的新技术一起结合使用,你很大概率会被按在地上摩擦,会yarn/npm和React脚手架等技术是前提,后面我会继续写PWA深入和No

  • React项目中应用TypeScript的实现

    目录 一.前言 二.使用方式 无状态组件 有状态组件 受控组件 三.总结 一.前言 单独的使用typescript 并不会导致学习成本很高,但是绝大部分前端开发者的项目都是依赖于框架的 例如和vue.react 这些框架结合使用的时候,会有一定的门槛 使用 TypeScript 编写 react 代码,除了需要 typescript 这个库之外,还需要安装@types/react.@types/react-dom npm i @types/react -s npm i @types/react-

  • React + Typescript领域初学者的常见问题和技巧(最新)

    React + Typescript领域初学者的常见问题和技巧 创建一个联合类型的常量 Key const NAME = { HOGE: "hoge", FUGA: "fuga" } as const; keyof typeof NAME // => "HOGE" | "FUGA" 创建常量值的联合类型 typeof NAME[keyof typeof NAME] // => "hoge" |

  • React+TypeScript+webpack4多入口配置详解

    资源 React-16.8.* react-router-dom-4.3.* TypeScript-3.5.* webpack-4.* eslint-5.16.* 项目目录 ├── dist # 打包结果目录 │ ├── demo1 //类别demo1的打包结果 │ │ ├── demo1.himl │ │ ├── demo1.js │ │ └── demo1.css │ └── demo2 ... //类别demo2的打包结果 ├── src # 业务资源文件目录 │ ├── category

  • 适合Python初学者的一些编程技巧

    这篇文章主要介绍了给Python初学者的一些编程技巧,皆是基于基础的一些编程习惯建议,需要的朋友可以参考下 交换变量 x = 6 y = 5 x, y = y, x print x >>> 5 print y >>> 6 if 语句在行内 print "Hello" if True else "World" >>> Hello 连接 下面的最后一种方式在绑定两个不同类型的对象时显得很co nfc = ["

  • React+TypeScript进行项目构建案例讲解

        react项目构建可以很简单,但是如果是结合typescript,其实也不是很麻烦,官网也有很明确的说明.有两种办法:     1.直接构建带有typescript的react项目,我们需要增加额外的参数,模版不能使用默认的cra-template.而是使用cra-template-typescript. npx create-react-app tsreactdemo --template typescript           创建完成的成功提示与原来没有太大的区别,直接进入项目路

  • Vite+React+TypeScript手撸TodoList的项目实践

    目录 布局与样式 创建工程 定义全局数据类型 实现步骤 源码地址 布局与样式 一个TodoList长什么样子相信无需多言: 上样式: src/TodoList.css .td-wrapper { width: 700px; margin: 0 auto; } .dp-wrapper { width: 100%; height: 40px; display: flex; margin-top: 10px; } .dp-wrapper input { flex: 4; height: 36px; l

  • react+typescript中使用echarts的实现步骤

    安装echarts npm install echarts --save 按需加载Echarts demo echarts.init() API文档 import * as echarts from 'echarts/core' import { BarChart, // 系列类型的定义后缀都为 SeriesOption LineChart, } from 'echarts/charts' import { TitleComponent, // 组件类型的定义后缀都为 ComponentOpti

  • React TypeScript 应用中便捷使用Redux Toolkit方法详解

    目录 前言 背景 Redux-Toolkit 常规使用 优化方案 优化 useDispatch 和 useSelector 优化修改 redux 状态的步骤 总结 前言 本文介绍的主要内容是 Redux-Toolkit 在 React + TypeScript 大型应用中的实践,主要解决的问题是使用 createSlice 的前提下消费 redux 状态仍旧有点繁琐的问题. 阅读本文需要的前置知识:了解 React .Redux-Toolkit .TypeScript 的使用. 关于 Redux

  • vite + react +typescript 环境搭建小白入门教程

    目录 前言 1. 使用 vite 创建 react 项目 1. npm / yarn 命令初始化 2. 输入项目名称 3. 选择框架 4. 选择 Js / Ts 5. 项目创建完成 6. 启动项目 2. 规范项目目录 3. 使用 react-router-dom 路由 1. 使用 npm / yarn 命令下载 2. 更改 react-router-dom 版本 3. 修改App.tsx文件 4. 配置 alias 别名 5. 配置 Ant Design 样式库 6. 配置axios与顶部加载进

  • 详解React Native顶|底部导航使用小技巧

    导航一直是App开发中比较重要的一个组件,ReactNative提供了两种导航组件供我们使用,分别是:NavigatorIOS和Navigator,但是前者只能用于iOS平台,后者在ReactNative0.44版本以后已经被移除了. 好在有人提供了更好的导航组件,就是我们今天要讲的react-navigation,并且ReactNative官方更推荐我们使用此组件. 本篇文章只讲解基础用法,如果你想了解更多,请戳这里->戳我.  简介 react-navigation主要包括导航,底部tab,

随机推荐