React Native Web

為 react-native-web 設定 React Storybook

在 Github 上檢視

Storybook 的 React Native Web 外掛程式

這個外掛程式設定 @storybook/react 以使用 React Native for Web (RNW) 顯示 React Native (RN) 專案

請參閱常見問題以了解常見問題。

您可以在這篇部落格文章中閱讀更多關於此套件的資訊。

如要貢獻,請參閱這裡的貢獻指南

這是如何將其與 storybook/react-native 一起使用的螢幕截圖,此圖片取自以下入門程式碼

image with storybook on mobile and web

開始使用

假設您有一個現有的 RN 專案,請從專案根目錄執行以下指令

npx sb init --type react
yarn add react-dom react-native-web babel-plugin-react-native-web @storybook/addon-react-native-web --dev

然後編輯您的 .storybook/main.js

module.exports = {
  addons: [/*existing addons,*/ '@storybook/addon-react-native-web'],
};

從這裡開始,您應該可以根據React 的 Storybook說明,編寫包含 RN 元件的故事。

常見問題

請參閱常見問題,以了解常見問題,例如「找不到載入器」錯誤。

設定選項

大多數套件應該不需要額外變更即可運作,但在某些情況下需要額外步驟。一個常見的例子是「reanimated」,它需要一些 babel 設定和額外的轉換。

選項 類型 描述
modulesToTranspile Array<string> 需要轉換的 node_modules
modulesToAlias {[key: string]: string} 需要別名的 node_modules
babelPlugins Array<string> 您要套用的 Babel 外掛程式
projectRoot string 您的專案根目錄的路徑,如果在單一儲存庫中,您可能需要設定此路徑。

未轉換的 react native 函式庫

許多 react-native 套件都是以未轉換的形式發布,這不適用於 web 平台。如果在新增套件後收到類似「找不到正確的載入器」的錯誤,請嘗試將其新增至此外掛程式的 modulesToTranspile 選項。

您可以像這樣操作

module.exports = {
  addons: [
    /*existing addons,*/
    {
      name: '@storybook/addon-react-native-web',
      options: {
        modulesToTranspile: ['react-native-package-name'],
      },
    },
  ],
};

為 react native web 函式庫設定別名

有些 react-native 套件建議使用模組別名作為匯入和使用現有套件的 web 變體的方法。如果需要將額外的 key:value 配對新增至 webpack 的 config.resolve.alias,請使用此外掛程式的 modulesToAlias 選項。您不需要將 react-native-web 新增至此清單,因為預設已包含。

您可以像這樣操作

module.exports = {
  addons: [
    /*existing addons,*/
    {
      name: '@storybook/addon-react-native-web',
      options: {
        modulesToAlias: {
          'react-native-package-name': 'react-native-web-package-name',
        },
      },
    },
  ],
};

react-native-package-name 取代為真實套件的名稱。

新增 babel 外掛程式

在 react native 生態系統中,為某些套件提供 babel 外掛程式是很常見的,您可以將這些外掛程式的清單傳遞給此外掛程式。

module.exports = {
  addons: [
    /*existing addons,*/
    {
      name: '@storybook/addon-react-native-web',
      options: {
        babelPlugins: ['babel-plugin-name'],
      },
    },
  ],
};

設定熱門函式庫

許多函式庫不需要額外設定即可運作,以下是一些套件所需的設定範例。

注意:react-native-vector-icons 由於需要字型,因此需要一些額外步驟,並且未來會有一個包含該設定的外掛程式。

module.exports = {
  addons: [
    /*existing addons,*/
    {
      name: '@storybook/addon-react-native-web',
      options: {
        modulesToTranspile: ['react-native-reanimated'],
        babelPlugins: ['react-native-reanimated/plugin'],
      },
    },
  ],
};
module.exports = {
  addons: [
    /*existing addons,*/
    {
      name: '@storybook/addon-react-native-web',
      options: {
        modulesToTranspile: ['react-native-vector-icons'],
      },
    },
  ],
};
module.exports = {
  addons: [
    /*existing addons,*/
    {
      name: '@storybook/addon-react-native-web',
      options: {
        modulesToTranspile: ['react-native-vector-icons'],
      },
    },
  ],
};

已知限制

  • 不支援 react-native-web 的函式庫將無法運作
  • 元件將顯示在 web 上,因此可能與行動裝置上的元件不同,因為可能會使用這些元件的 dom 版本(例如 <div>span
    • 當使用 View/Text 或其他跨平台元件等基本元件時,差異應該會很小。