ホームページ > ウェブフロントエンド > jsチュートリアル > React Native で SVG に動的に色を適用する方法

React Native で SVG に動的に色を適用する方法

Linda Hamilton
リリース: 2025-01-09 14:28:41
オリジナル
940 人が閲覧しました

How to Dynamically Apply Colors to SVGs in React Native

SVG は、React Native アプリケーションでスケーラブルなベクターベースのグラフィックスを表示する強力な方法です。ただし、SVG コードが適切に設定されていない場合、fill などの属性のカスタマイズが困難になる場合があります。一般的な問題は、塗りつぶしプロパティが SVG でハードコーディングされており、動的な色の変更が妨げられている場合に発生します。

このブログでは、この問題が発生する理由を説明し、React Native で SVG カラーをカスタマイズできるようにするための解決策を提供します。


インストールとセットアップ:

a) インストール:

yarn add react-native-svg && yarn add react-native-svg-transformer --dev
ログイン後にコピー

b) ルート ディレクトリで次のように Metro.config.js を作成/更新します。

const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config');

const defaultConfig = getDefaultConfig(__dirname);
const { assetExts, sourceExts } = defaultConfig.resolver;

/**
 * Metro configuration
 * https://facebook.github.io/metro/docs/configuration
 *
 * @type {import('metro-config').MetroConfig}
 */
const config = {
  transformer: {
    babelTransformerPath: require.resolve('react-native-svg-transformer'),
  },
  resolver: {
    assetExts: assetExts.filter((ext) => ext !== 'svg'),
    sourceExts: [...sourceExts, 'svg'],
  },
};

module.exports = mergeConfig(defaultConfig, config);
ログイン後にコピー

React Native で svg ファイルを使用できるようになりました。


問題を理解する

次の SVG ファイルの例を考えてみましょう:

<svg
  width="4"
  height="18"
  viewBox="0 0 4 18"
  fill="none"
  xmlns="http://www.w3.org/2000/svg"
>
  <path
    d="M1.9987 4.41667C0.986176 4.41667 0.165365 3.59586 0.165365 2.58333C0.165365 1.57081 0.986176 0.75 1.9987 0.75C3.01122 0.75 3.83203 1.57081 3.83203 2.58333C3.83203 3.59586 3.01122 4.41667 1.9987 4.41667Z"
    fill="#EFF2F6"
  />
</svg>
ログイン後にコピー

内の fill="#EFF2F6"要素はハードコードされています。 fill prop を SVG コンポーネントに渡す場合、この値はオーバーライドされません。これにより、グラフィックが静的になり、動的スタイルに応答しなくなります。


解決策 1: currentColor を使用する

fill プロパティを動的にする最も簡単な方法は、ハードコードされた fill 値を currentColor に置き換えることです。 currentColor 値は、コンポーネントに渡される color または fill プロパティを継承します。

更新された SVG:

<svg
  width="4"
  height="18"
  viewBox="0 0 4 18"
  fill="none"
  xmlns="http://www.w3.org/2000/svg"
>
  <path
    d="M1.9987 4.41667C0.986176 4.41667 0.165365 3.59586 0.165365 2.58333C0.165365 1.57081 0.986176 0.75 1.9987 0.75C3.01122 0.75 3.83203 1.57081 3.83203 2.58333C3.83203 3.59586 3.01122 4.41667 1.9987 4.41667Z"
    fill="currentColor"
  />
</svg>
ログイン後にコピー

React Native での使用:

<ThreeDots height="100%" fill="#707070" />
ログイン後にコピー

これで、fill プロパティは SVG の色を動的に制御します。


解決策2: React Nativeのreact-native-svgを使用する

react-native-svg を使用して SVG を処理している場合は、SVG の React コンポーネントを作成し、塗りつぶしを prop として渡すことができます。

これが例です:

import Svg, { Path } from 'react-native-svg';

const ThreeDots = ({ height = "100%", fill = "#707070" }) => (
  <Svg width="4" height="18" viewBox="0 0 4 18" fill="none" xmlns="http://www.w3.org/2000/svg">
    <Path
      d="M1.9987 4.41667C0.986176 4.41667 0.165365 3.59586 0.165365 2.58333C0.165365 1.57081 0.986176 0.75 1.9987 0.75C3.01122 0.75 3.83203 1.57081 3.83203 2.58333C3.83203 3.59586 3.01122 4.41667 1.9987 4.41667Z"
      fill={fill}
    />
  </Svg>
);

export default ThreeDots;
ログイン後にコピー

使用法:

<ThreeDots height="100%" fill="#FF0000" />
ログイン後にコピー

fill prop が動的に に渡されるようになりました。要素。


結論

currentColor、react-native-svg を使用するか、SVG コンポーネントをカスタマイズすることにより、React Native アプリの fill プロパティを動的に制御できます。これにより、柔軟性が向上し、デザインが動的で、ユーザーの操作やテーマの変更に応答できるようになります。

以上がReact Native で SVG に動的に色を適用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート