国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

在 TypeScript 的 Next.js 中創(chuàng)建 HOC withAuth 的最佳方法是什么?

在 TypeScript 的 Next.js 中創(chuàng)建 HOC withAuth 的最佳方法是什么?

問題:

我有一個(gè) Next.js 應(yīng)用程序,并且正在使用next-authpackage.json。我正在嘗試創(chuàng)建一個(gè) HOC 來包裹實(shí)際組件并確定它是否有會(huì)話。我也在使用 eslint。這是我的代碼:

import { useRouter } from 'next/navigation';
import { useSession } from 'next-auth/react';

type Props = any;

const withAuth = (Component: React.ComponentType<Props>) => {
  const Auth = (props: Props) => {
    const router = useRouter();
    const { status } = useSession({
      required: true,
      onUnauthenticated() {
        router.push('/welcome/login');
      },
    });

    if (status === 'loading') {
      return 'Loading ...';
    }

    return <Component {...props} />;
  };
  return Auth;
};

export default withAuth;

Eslint 向我發(fā)出有關(guān)我使用 type 的警告any我嘗試將這兩行更改為使用通用類型的位置:

const withAuth = <P extends {}>(Component: React.ComponentType<P>) => {
    const Auth = (props: P) => {

但現(xiàn)在它報(bào)錯(cuò)了:

Error: Don't use `{}` as a type. `{}` actually means "any non-nullish value".
- If you want a type meaning "any object", you probably want `object` instead.
- If you want a type meaning "any value", you probably want `unknown` instead.
- If you want a type meaning "empty object", you probably want `Record<string, never>` instead.
- If you really want a type meaning "any non-nullish value", you probably want `NonNullable<unknown>` instead.  @typescript-eslint/ban-types

當(dāng)我們必須將組件作為 props 傳遞時(shí),編寫 HOC 的最佳方法是什么?我不知道它會(huì)是什么樣的組件

解決方案或解答

一般來說,TypeScript 建議不要使用{}作為泛型類型約束,因?yàn)樗粫?huì)施加任何類型檢查約束,因此它本質(zhì)上與使用 一樣寬松any。

您可以使用unknownorRecord<string, unknown>來獲得更好的類型安全性,并且 ESLint 錯(cuò)誤也不會(huì)彈出。

這些類型基本上假設(shè)您不知道該對(duì)象將采用什么形狀,但它不會(huì)是nullor undefined,使其足夠靈活以包裝任何組件。

所以在你的情況下:

const withAuth = <P extends Record<string, unknown>>(
  Component: React.ComponentType<P>
): React.FC<P> => {
  const Auth: React.FC<P> = (props) => {
    const router = useRouter();
    const { status } = useSession({
      required: true,
      onUnauthenticated() {
        router.push('/welcome/login');
      },
    });

    if (status === 'loading') {
      return 'Loading ...';
    }

    return <Component {...props} />;
  };

  return Auth;
};

export default withAuth;

所以在這里, props 參數(shù)的類型不是 ,any而是 類型P,這是我們限制為 的泛型類型Record<string, unknown>。文章來源地址http://www.zghlxwxcb.cn/article/381.html

到此這篇關(guān)于在 TypeScript 的 Next.js 中創(chuàng)建 HOC withAuth 的最佳方法是什么?的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

原文地址:http://www.zghlxwxcb.cn/article/381.html

如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)聯(lián)系站長進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 為什么選擇 Next.js 框架?

    Next.js 框架作為一種強(qiáng)大而受歡迎的工具,為開發(fā)人員提供了許多優(yōu)勢(shì)和便利。本文將探討 Next.js 框架的優(yōu)點(diǎn),并解釋為什么選擇 Next.js 是一個(gè)明智的決策。 文檔:https://nextjs.org/docs Next.js 框架提供了先進(jìn)的服務(wù)端渲染(SSR)和靜態(tài)生成(SSG)能力,使得我們能夠在服務(wù)器上生

    2024年02月12日
    瀏覽(26)
  • 前端食堂技術(shù)周刊第 85 期:5 月瀏覽器更新、TypeScript 5.1、Rspack 0.2.0、Parcel v2.9.0、Next.js 企業(yè)級(jí)模板

    前端食堂技術(shù)周刊第 85 期:5 月瀏覽器更新、TypeScript 5.1、Rspack 0.2.0、Parcel v2.9.0、Next.js 企業(yè)級(jí)模板

    美味值:?????????? 口味:龍井酥 食堂技術(shù)周刊倉庫地址:https://github.com/Geekhyt/weekly 5 月登陸瀏覽器的新功能 TypeScript 5.1 Rspack 0.2.0 Parcel v2.9.0 Next.js 企業(yè)級(jí)模板 SupportsCSS useHooks 大家好,我是童歐巴。歡迎來到前端食堂技術(shù)周刊,我們先來看下上周的技術(shù)資訊。 Firefox 1

    2024年02月08日
    瀏覽(24)
  • 在 React+Typescript 項(xiàng)目環(huán)境中創(chuàng)建并使用組件

    在 React+Typescript 項(xiàng)目環(huán)境中創(chuàng)建并使用組件

    上文 React+Typescript清理項(xiàng)目環(huán)境 我們將自己創(chuàng)建的項(xiàng)目環(huán)境 好好清理了一下 下面 我們來看組件的創(chuàng)建 組件化在這種數(shù)據(jù)響應(yīng)式開發(fā)中肯定是非常重要的。 我們現(xiàn)在src下創(chuàng)建一個(gè)文件夾 叫 components 就用他專門來處理組件業(yè)務(wù) 然后 我們?cè)谙旅鎰?chuàng)建一個(gè) hello.tsx 注意 是tsx 別習(xí)

    2024年02月12日
    瀏覽(31)
  • React-Hoc高階組件與css-in-js技術(shù)

    React-Hoc高階組件與css-in-js技術(shù)

    目錄 一、什么是React-Hoc 二、什么是高階組件 三、什么是css-in-js技術(shù) React-HOC(Higher-Order Component,高階組件)是React中一種用于重用組件邏輯的模式。它本質(zhì)上是一個(gè)函數(shù),接受一個(gè)組件作為參數(shù)并返回一個(gè)新的組件。 HOC可以用于在不修改原始組件的情況下,為組件添加額外

    2024年01月24日
    瀏覽(17)
  • 華為OD機(jī)試 - 最佳的出牌方法(Java & JS & Python)

    華為OD機(jī)試 - 最佳的出牌方法(Java & JS & Python)

    題目描述 手上有一副撲克牌,每張牌按牌面數(shù)字記分(J=11,Q=12,K=13,沒有大小王),出牌時(shí)按照以下規(guī)則記分: 出單張,記牌面分?jǐn)?shù),例如出一張2,得分為2 出對(duì)或3張,記牌面分?jǐn)?shù)總和再x2,例如出3張3,得分為(3+3+3)x2=18 出5張順,記牌面分?jǐn)?shù)總和再x2,例如出34567順,得分為

    2024年02月12日
    瀏覽(55)
  • Redux Toolkit+TypeScript最佳實(shí)踐

    Redux Toolkit+TypeScript最佳實(shí)踐

    Redux-Toolkit是為了簡化使用Redux繁瑣的步驟,可以j降低使用useReducer與useContext管理狀態(tài)的頻率,而且起到項(xiàng)目中狀態(tài)管理規(guī)范和約束化的效果。 閱讀本文需要的前置知識(shí):React、Redux、Typescript、Redux hooks。 目前使用Redux-Toolkit管理消費(fèi)redux狀態(tài)的方式。舉個(gè)例子,假設(shè)我們現(xiàn)在的

    2024年04月08日
    瀏覽(31)
  • 掌握TypeScript:10個(gè)最佳實(shí)踐提高代碼質(zhì)量

    TypeScript 是一種強(qiáng)類型的 JavaScript 超集,提供了很多優(yōu)秀的工具和語言特性,可以幫助開發(fā)者提高代碼質(zhì)量和開發(fā)效率。在本文中,我們將介紹 10 個(gè) TypeScript 最佳實(shí)踐,幫助初級(jí)和中級(jí)的 Web 前端開發(fā)工程師更好地使用 TypeScript 開發(fā)高質(zhì)量的代碼。 在 TypeScript 中,嚴(yán)格模式可

    2023年04月11日
    瀏覽(95)
  • next.js報(bào)錯(cuò)點(diǎn)

    next.js報(bào)錯(cuò)點(diǎn)

    解決方案 1.大概是引用的組件和本組件重名了,換成其他的就可以 解決方案 我一開始定義的navs是數(shù)組類型。 在React中,void[] 是一個(gè)數(shù)組,它沒有元素。由于它沒有元素,所以不能將其分配給 ReactNode 類型。 在React中,ReactNode 是所有允許的子節(jié)點(diǎn)的類型標(biāo)簽。這兩個(gè)類型不兼

    2024年02月11日
    瀏覽(37)
  • Next.js基礎(chǔ)語法

    Next.js基礎(chǔ)語法

    _app.tsx是項(xiàng)目的入口組件,主要作用: 可以擴(kuò)展自定義的布局(Layout) 引入全局的樣式文件 引入Redux狀態(tài)管理 引入主題組件等等 全局監(jiān)聽客戶端路由的切換 Next.js默認(rèn)是沒有配置路徑別名的,我們可以在ts.config.json中配置模塊導(dǎo)入的別名: baseUrl :配置允許直接從項(xiàng)目的根目

    2024年02月10日
    瀏覽(67)
  • 使用 Flask 部署 Next.js

    原文?使用 Flask 部署 Next.js Flask 和 Next.js 是兩個(gè)獨(dú)特的開源 Web 框架,分別構(gòu)建在 Python 和 JavaScript 編程語言之上。 您可以在沒有 Next.js 的情況下構(gòu)建 Flask 應(yīng)用程序,也可以在沒有 Flask 的情況下構(gòu)建 Next.js 應(yīng)用程序。但是,您可能會(huì)發(fā)現(xiàn)自己使用 Flask 構(gòu)建了一個(gè)應(yīng)用程序,

    2024年02月12日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包