<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
建立一個聯合型別的常數 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; };
基本上它是由命名約定“元件名+Props”提供的,所以使用它。
type ExtendsProps = TextFieldProps & { hoge: number; };
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 而不是錯誤。
空合併運運算元 ??
如果左側為空,則返回右側的值,否則返回左側的值。
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}`;
可以編寫箭頭函數,以便可以省略花括號,並且不需要返回。
我曾經生成一個合適的金鑰。
如果上述函數的範圍適當,它將如下所示。
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常見問題內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45