JavaScript >> Javascript 文檔 >  >> Tags >> Function

JS從函數返回一個數組和一個對象

在我的反應應用程序中,我有一個處理屏幕大小調整的鉤子。該函數返回一個寬高數組。

function useDimensions() {
  const [size, setSize] = useState([window.innerWidth, window.innerHeight]);
  const [isSmScreen, setIsSmScreen] = useState(false);
  const [isLgScreen, setIsLgScreen] = useState(false);

  function handleResize() {
    const windowWidth = window.innerWidth;
    if (windowWidth < BREAKPOINTS.sm) {
      setIsXsScreen(true);
    } else if (windowWidth < BREAKPOINTS.lg) {
      setIsSmScreen(true);
    }

    setSize([window.innerWidth, window.innerHeight]);
  }

  useLayoutEffect(() => {
    // So it doesnt get called every pixel changed
    const debouncedResize = debounce(handleResize, 100);

    window.addEventListener('resize', debouncedResize);

    return () => window.removeEventListener('resize', handleResize);
  }, []);

  return size;
}

export default useDimensions;

我在我的反應應用程序中調用鉤子,例如 const [width] = useDimensions() .我也想調用像 const {isSmScreen} = useDimensions() 這樣的鉤子 .這可能嗎?如何從 useDimensions 鉤子中導出它

回答

當然,由於數組是一個對象,你可以定義額外的屬性。

例如:

size.isSmScreen = isSmScreen;
return size;

或者:

return Object.assign(size, {isSmScreen});

這是否是一個好主意,雖然是有爭議的。如果我使用函數來獲取數組,我不希望該數組具有其他自定義屬性。

將數組數據作為返回對象的單個屬性返回會更自然,例如:

return { size, isSmScreen }

那麼調用者當然必須意識到這一點。只獲取寬度,它可以這樣做:

let { size: [width] } = useDimensions();

Tutorial JavaScript 教程
  1. 創建自己的 React 驗證庫:基礎知識(第 1 部分)

  2. 在java中轉義javascript字符串

  3. this.$refs.upload.submit();不返迴響應 Element-UI

  4. 創建並分配角色 Discord.js

  5. 如何將 HTML5 畫布文本設置為粗體和/或斜體?

  6. 在javascript中檢索一年中的最後一天

  7. 正則表達式檢查字符串是否以開頭,忽略大小寫差異

  1. 如何在 JavaScript 中按日期對數組進行排序

  2. 在 Node Js 中發布表單

  3. 如何在 PayPal 訂閱 API 中獲取用戶的訂閱狀態

  4. 在傳統的 HTML/CSS/JS 環境中使用 ES6 導入構建 React?

  5. URL 中有多個哈希符號

  6. IF 語句。如果數據在變量中列出,則運行函數

  7. 如何在 Nuxt Config 中使用 Firebase 環境變量

  1. 導航計時 API 包含當前導航的類型

  2. 如何有條件地渲染標籤以避免標籤在圖表中重疊?

  3. 使用 React 表單驗證啟動並運行

  4. 當您創建軟件來學習編程時,您最重要的用戶就是您