簡體   English   中英

如何將函數指定為具有默認值的鈎子的可選參數

[英]How to specify a function as an optional parameter to a hook with a default value

我正在嘗試使用 TypeScript 在 React 應用程序中編寫一個自定義鈎子,該鈎子可以采用多個可選的回調函數。 但是我收到以下錯誤:

未捕獲的類型錯誤:無法讀取未定義的屬性(讀取“onUpdate”)。 我寫了一個這樣的界面:

interface UseMyHookProps {
  onConnect:() => void;
  onUpdate?:() => void;
  onDisconnect?:() => {};
}

然后我的鈎子是這樣的:

const useMyHook = ({ onConnect = () => {}, onUpdate = () => {}, onDisconnect = () => {} }: UseMyHookProps) => {
  ...
  // call the callback if defined.
  onUpdate();
};

最后,我在組件函數中調用鈎子,如下所示:

const MyComponent = () => {
  useMyHook();
  ...
};

我不明白為什么我會收到這個錯誤。 我說回調是可選的,並提供一個不做任何事情的 void 函數的默認參數。

問題是你只為對象的屬性提供默認值,而不是為對象本身提供默認值,如果你調用不帶參數的鈎子,它仍然可以是undefined

您可以通過將鈎子的參數默認為空對象來輕松解決這個問題= {}

  const useMyHook = ({
    onConnect = () => {},
    onUpdate = () => {},
    onDisconnect = () => {},
  }: UseMyHookProps = {}) => { // <<<<
    // call the callback if defined.
    onUpdate();
  };

下面的版本完全相同,但更冗長,你可以看到如果沒有默認params = {}params將是未定義的,並且下面的對象解構將失敗

  const useMyHook = (params: UseMyHookProps = {}) => {
    const {
      onConnect = () => {},
      onUpdate = () => {},
      onDisconnect = () => {},
    } = params

    // call the callback if defined.
    onUpdate();
  };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM