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 弱。要修复的功能。 |
注意: 注意: | 在强调实现的意图以及为什么要这样写的时候写。 |
哈克: | 我想重构。 |
审查: | 需要审查或查看。 |
警告: | 当心。 |
什么是假的
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领域初学者的常见问题和技巧的更多相关文章
- Python初学者的一些编程技巧
#####################喜欢就多多关注哦######################### Python初学者的一些编程技巧 交换变量 ? 1 2 3 4 5 6 7 8 9 ...
- react + typescript 学习
react,前端三大框架之一,也是非常受开发者追捧的一门技术.而 typescript 是 javascript 的超集,主要特点是对 类型 的检查.二者的结合必然是趋势,不,已经是趋势了.react ...
- 给Python初学者的一些编程技巧
展开这篇文章主要介绍了给Python初学者的一些编程技巧,皆是基于基础的一些编程习惯建议,需要的朋友可以参考下交换变量 x = 6y = 5 x, y = y, x print x>>&g ...
- react typescript jest config (一)
1. initialize project create a folder project Now we'll turn this folder into an npm package. npm in ...
- 【每天学一点-04】使用脚手架搭建 React+TypeScript+umi.js+Antd 项目
一.使用脚手架搭建项目框架 1.首先使用脚手架搭建React项目(React+TypeScript+Umi.js) 在控制台输入命令:yarn create @umijs/umi-app 2.引入An ...
- React + TypeScript + Taro前端开发小结
前言 项目到一段落,先来记录一下,本文以前端新手的角度记录React.TypeScript.Taro相关技术的开发体验以及遇到的问题和解决方法. 之前总说要学React(这篇博客:代码使我头疼之Rea ...
- 前端自动化测试 —— TDD环境配置(React+TypeScript)
欢迎讨论与指导:) 前言 TDD -- Test-Drive Development是测试驱动开发的意思,是敏捷开发中的一项核心实践和技术,也是一种测试方法论.TDD的原理是在开发功能代码之前,先编写 ...
- React Native底|顶部导航使用小技巧
导航一直是App开发中比较重要的一个组件,ReactNative提供了两种导航组件供我们使用,分别是:NavigatorIOS和Navigator,但是前者只能用于iOS平台,后者在ReactNati ...
- React + TypeScript:元素引用的传递
React 中需要操作元素时,可通过 findDOMNode() 或通过 createRef() 创建对元素的引用来实现.前者官方不推荐,所以这里讨论后者及其与 TypeScript 结合时如何工作. ...
随机推荐
- python数据类型与基础运算
注释:了解其他数据类型补充 基础数据类型补充 可以回一下之前的数据类型: 整型,浮点型,字串符和列表. 一.字典(dict) #字典:可以精准的储存数据 是用大括号表示'{}' '字典和数据数据列表差 ...
- 携程apollo配置中心服务端如何感知配置更新?
引言 前面有写过一篇<分布式配置中心apollo是如何实时感知配置被修改>,也就是客户端client是如何知道配置被修改了,有不少读者私信我你既然说了client端是如何感知的,那服务端又 ...
- Python数据展示 - 生成表格图片
前言 前一篇文章介绍了推送信息到企业微信群里,其中一个项目推送的信息是使用Python自动生成的表格,本文来讲讲如何用Python生成表格图片. 选一个合适库 Python最大的优点就是第三方库丰富, ...
- Android第七周作业
1.三个界面,界面1点击按钮使用显式意图开启界面2.界面2点击按钮隐式意图开启界面3 package com.example.myapplication; import androidx.appcom ...
- redis中的字典结构是怎样的?
点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. 基础概念 redis支持的5种数据类型中,有hash类型,hash类型的 ...
- 攻防世界-MISC:base64stego
这是攻防世界新手练习区的第十一题,题目如下: 点击下载附件一,发现是一个压缩包,点击解压,发现是需要密码才能解密 先用010editor打开这个压缩包,这里需要知道zip压缩包的组成部分,包括压缩源文 ...
- 【干货】BIOS、UEFI、MBR、GPT、GRUB 到底是什么意思?
公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 01 前言 在学习 Linux 系统启动原理之前,我们先了解下与操作系统启动相关的几个概念. 02 与操作系统启动相关的几个 ...
- 如何基于 ZEGO SDK 实现 Android 通话质量监测
功能简介 在进行视频通话过程中,用户有时候会出现网络不好的情况,比如在进行多人视频通话或者多人唱歌时,我们需要实时显示用户的网络质量. 示例源码 参考 下载示例源码 获取源码. 相关源码请查看 &qu ...
- OracleRAC ACFS安装与卸载
目录 ACFS安装与卸载: 一.在RAC上手动安装ACFS/ADVM 模块的步骤如下: 1.验证内存中是否存在 ACFS/ADVM 模块: 2.用root用户重新安装ACFS/ADVM 模块: 3.A ...
- opencv学习之基础
前段时间一直在钻研深度学习中的卷积神经网络,其中的预处理环节可以说非常关键,主要就是对图片和视频进行处理.而图像处理就涉及到图形学和底层技术细节,这是一个比较精深和专业的领域,假设我们要从头开始做起, ...