reactJSでホバーしたときに親コンポーネントの背景を変更する

Vardan Hambardzumyan

私は次のReactコードを持っています

コード

「Eコマース」の画像にカーソルを合わせると、アプリコンポーネントの背景が「Eコマース」の画像の背景に変わるはずです。

だからそれぞれそして他の写真のために。

この問題の解決にご協力いただければ幸いです。

フランク

Reactのドキュメントよると、コンテキストは、現在のユーザーやテーマなどの真にグローバルな状態にのみ使用する必要があります。コンポーネントにコンテキストを使用すると、コンポーネントの再利用が低下します。

更新されたコード

コンポーネントツリーは、App-> SolutionBox-> SolutionItemです。

アプリのSolutionItemのイベントに「反応」したいのですが、それらの間にSolutionBoxがあるため、SolutionBoxを介してイベントをアプリにスレッド化する必要があります。

ステップ1

OnHoverで呼び出されるSolutionItemに小道具を追加します。これは、親コンポーネントが変更に対応するために使用できる関数コールバックになります。

function SolutionsSectionBoxItem({ solutionIMG, onHover }) {
  let callOnHover = state => {
    if (_.isFunction(onHover)) {
      onHover(state);
    }
  };

  return (
    <div className="solutions-section-item-box">
      <img
        src={solutionIMG}
        alt=""
        onMouseEnter={() => {
          callOnHover(true);
        }}
        onMouseLeave={() => {
          callOnHover(false);
        }}
        className="solutions-section-item-img"
      />
    </div>
  );
}

ステップ2

BGChangedで呼び出されるSolutionBoxItemに小道具を追加します。これも、ソリューションアイテムのオンホバーが発生したときに呼び出される関数コールバックになります。この関数はmenuName文字列を受け取り、現在のメニュー名またはデフォルトのいずれかを渡します。

function SolutionsSectionBox({ onBGChanged }) {
  let callBGChanged = menuName => {
    if (_.isFunction(onBGChanged)) {
      onBGChanged(menuName);
    }
  };

  return (
    <div className="solutions-section-box-box">
      <SolutionItem
        solutionIMG={Ecommerce}
        onHover={state => {
          callBGChanged(state === true ? "Ecommerce" : "default");
        }}
      />
      <SolutionItem
        solutionIMG={SalesMarketing}
        onHover={state => {
          callBGChanged(state === true ? "SalesMarketing" : "default");
        }}
      />
      <SolutionItem
        solutionIMG={Analytics}
        onHover={state => {
          callBGChanged(state === true ? "Analytics" : "default");
        }}
      />
      <SolutionItem
        solutionIMG={Middleware}
        onHover={state => {
          callBGChanged(state === true ? "Middleware" : "default");
        }}
      />
    </div>
  );
}

ステップ3

アプリコンポーネントで変更をリッスンします。ここでは、マウスがソリ​​ューションアイテムに出入りするたびに状態を設定します。ここから、背景を変更する必要があります。cssを使用して背景のURLを制御しています。これは、背景の種類ごとにcssクラスが必要になるため、難しくなります。bgImage状態値を使用して、「AppSalesMarketing」、「AppEcommerce」などの追加のcssclassNameの名前を変更できます。

    export default function App() {
  const [bgImage, setbgImage] = useState(E);

  const onBGChanged = menuName => {
    setbgImage(menuName);
  };

  return (
    <div className={`App ${bgImage === "default" ? "" : `App${bgImage}`}`}>
      <SolutionBox onBGChanged={onBGChanged} />
    </div>
  );
}

CSSで

元のAppクラスを残しますが、bgImage値に基づいて、以下のようにbgImage + Appの名前を使用して追加のクラスを追加し、更新されたbackground-image値をカスケードします。

.AppEcommerce {
  background-image: url(https://placekitten.com/600/600);
}

.AppSalesMarketing {
  background-image: url(https://placekitten.com/500/800);
}

.AppAnalytics {
  background-image: url(https://placekitten.com/800/500);
}

.AppMiddleware {
  background-image: url(https://placekitten.com/700/700);
}

エクストラ

着信する小道具が関数であるかどうかをテストするためにlodashを追加してから呼び出します。将来、誰がコンポーネントを使用するかわからないため、防御的なプログラミングを行うことをお勧めします。

let callBGChanged = menuName => {
    if (_.isFunction(onBGChanged)) {
      onBGChanged(menuName);
    }
  };  

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

親コンポーネントの選択で(変更)が発生したときに子コンポーネントで関数を実行する方法

分類Dev

ReactJS - ネストされたルートに応じて親のコンポーネントを変更する

分類Dev

子コンポーネントが更新されたときに親の状態を変更する

分類Dev

ホバー時にコンポーネントの背景色を変更する

分類Dev

ReactJsコンポーネントでCSSを動的に変更するときのTypeError

分類Dev

OnPushを使用しているときに、データの変更が親コンポーネントに反映されるのはなぜですか?

分類Dev

子がコンテキストを変更したときに親コンポーネントを更新するように反応する

分類Dev

子コンポーネント変数が変更されたときに親コンポーネントを更新する

分類Dev

プロバイダーコンポーネントの親の状態が変化したときに、子コンポーネントの値を(reactコンテキストで)更新できないのはなぜですか?

分類Dev

反応ルーター使用時に反応で親の状態が変化したときにコンポーネントを更新する方法

分類Dev

React-親の状態コンポーネントが変更されたときに子コンポーネントを強制的に再レンダリングするにはどうすればよいですか?

分類Dev

React NativeFlatListで押されたときにコンポーネントの色を変更する方法

分類Dev

子コンポーネントで変更しているときに親コンポーネントでサービス変数が更新されない

分類Dev

JButtonは、ホバーしたときにコンポーネントをオーバーラップします

分類Dev

<リンク>はクリックしたときにURLを変更するだけで、コンポーネントとページは変更しません

分類Dev

ReactJS:APIからデータをフェッチした直後に、親コンポーネントから子コンポーネントにデータを渡すときに問題が発生します。(機能コンポーネントのみ)

分類Dev

画像にホバーしたときに背景の色を変更する

分類Dev

ReactJSは、親の再レンダリングの結果としてコンポーネントの小道具が変更されたときに状態を計算します

分類Dev

vueコンポーネントの子コンポーネントをクリックしたときに、親コンポーネントのデータを更新するにはどうすればよいですか?

分類Dev

子コンポーネントで変更された親コンポーネントの状態に基づいて、親コンポーネントでコードを実行します

分類Dev

ReactJS-ラジオボタンがクリックされたときにコンポーネントの色を動的に変更する

分類Dev

Vuejsでパラメーター化された子コンポーネントを変更するときに親コンポーネントが再ロードされないようにする方法

分類Dev

Vuejsでパラメーター化された子コンポーネントを変更するときに親コンポーネントが再ロードされないようにする方法

分類Dev

子コンポーネントで何かが変更されたときに親コンポーネントを再レンダリングするにはどうすればよいですか?

分類Dev

Svelteで小道具が変更されたときにディープコンポーネントを更新する

分類Dev

コンポーネント0が変更されたときに、UIPickerViewの最初のコンポーネントの値をリセットします

分類Dev

データが変更されたときにReactJSのMaterial-Table(Material-ui)コンポーネントを更新する方法

分類Dev

状態変更時に子コンポーネントを再レンダリングする方法(親)reactjs

分類Dev

Formikフォームが変更されたときに別のコンポーネントを更新する

Related 関連記事

  1. 1

    親コンポーネントの選択で(変更)が発生したときに子コンポーネントで関数を実行する方法

  2. 2

    ReactJS - ネストされたルートに応じて親のコンポーネントを変更する

  3. 3

    子コンポーネントが更新されたときに親の状態を変更する

  4. 4

    ホバー時にコンポーネントの背景色を変更する

  5. 5

    ReactJsコンポーネントでCSSを動的に変更するときのTypeError

  6. 6

    OnPushを使用しているときに、データの変更が親コンポーネントに反映されるのはなぜですか?

  7. 7

    子がコンテキストを変更したときに親コンポーネントを更新するように反応する

  8. 8

    子コンポーネント変数が変更されたときに親コンポーネントを更新する

  9. 9

    プロバイダーコンポーネントの親の状態が変化したときに、子コンポーネントの値を(reactコンテキストで)更新できないのはなぜですか?

  10. 10

    反応ルーター使用時に反応で親の状態が変化したときにコンポーネントを更新する方法

  11. 11

    React-親の状態コンポーネントが変更されたときに子コンポーネントを強制的に再レンダリングするにはどうすればよいですか?

  12. 12

    React NativeFlatListで押されたときにコンポーネントの色を変更する方法

  13. 13

    子コンポーネントで変更しているときに親コンポーネントでサービス変数が更新されない

  14. 14

    JButtonは、ホバーしたときにコンポーネントをオーバーラップします

  15. 15

    <リンク>はクリックしたときにURLを変更するだけで、コンポーネントとページは変更しません

  16. 16

    ReactJS:APIからデータをフェッチした直後に、親コンポーネントから子コンポーネントにデータを渡すときに問題が発生します。(機能コンポーネントのみ)

  17. 17

    画像にホバーしたときに背景の色を変更する

  18. 18

    ReactJSは、親の再レンダリングの結果としてコンポーネントの小道具が変更されたときに状態を計算します

  19. 19

    vueコンポーネントの子コンポーネントをクリックしたときに、親コンポーネントのデータを更新するにはどうすればよいですか?

  20. 20

    子コンポーネントで変更された親コンポーネントの状態に基づいて、親コンポーネントでコードを実行します

  21. 21

    ReactJS-ラジオボタンがクリックされたときにコンポーネントの色を動的に変更する

  22. 22

    Vuejsでパラメーター化された子コンポーネントを変更するときに親コンポーネントが再ロードされないようにする方法

  23. 23

    Vuejsでパラメーター化された子コンポーネントを変更するときに親コンポーネントが再ロードされないようにする方法

  24. 24

    子コンポーネントで何かが変更されたときに親コンポーネントを再レンダリングするにはどうすればよいですか?

  25. 25

    Svelteで小道具が変更されたときにディープコンポーネントを更新する

  26. 26

    コンポーネント0が変更されたときに、UIPickerViewの最初のコンポーネントの値をリセットします

  27. 27

    データが変更されたときにReactJSのMaterial-Table(Material-ui)コンポーネントを更新する方法

  28. 28

    状態変更時に子コンポーネントを再レンダリングする方法(親)reactjs

  29. 29

    Formikフォームが変更されたときに別のコンポーネントを更新する

ホットタグ

アーカイブ