質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

1593閲覧

Reactでboolean型以外のstateをトリガーにアニメーションは付けられますか。

TofuLove

総合スコア14

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2020/02/11 09:09

編集2020/02/11 09:10

サンプル

string型のstateをセットするボタンと、セットされたstateに応じて描画するコンポーネントがあります。
動的に描画するコンポーネントに、マウント時とアンマウント時にアニメーションを付けたいと考えています。

そこでreact-transition-groupのドキュメントを読んでいたのですが、アニメーションのトリガーとなるstateはboolean型のみと読み取りました。
Transition

とすると動的に描画したいコンポーネントごとにboolean型のstateとsetStateを用意する必要が生じると思うのですが、boolean型以外のstateでもアニメーションのトリガーにすることが可能なのでしょうか。

react-transition-group以外のライブラリも、トリガーとなっているstateはboolean型になっているように見受けられました。

アニメーションの内容は同じにすることと、アニメーションのために管理するstateを増やすのは避けたいので、管理するstateをできるだけ少なくしたいと考えています。
また、シンプルにCSSでアニメーションが付けられればよいので、ライブラリの使用は絶対的な条件ではありません。

ソースコード

jsx

1import React, { useState } from "react"; 2import styled from "styled-components"; 3 4export default function App() { 5 const [visible, setVisible] = useState("none"); 6 return ( 7 <Wrap> 8 <button onClick={() => setVisible("A")}>A</button> 9 <button onClick={() => setVisible("B")}>B</button> 10 <hr /> 11 {visible === "A" && <A setVisible={setVisible} />} 12 {visible === "B" && <B setVisible={setVisible} />} 13 </Wrap> 14 ); 15} 16 17const A = ({ setVisible }) => { 18 return ( 19 <StyleA> 20 <h2>This is A.</h2> 21 <button onClick={() => setVisible("none")}>close</button> 22 </StyleA> 23 ); 24}; 25const B = ({ setVisible }) => { 26 return ( 27 <StyleB> 28 <h2>This is B.</h2> 29 <button onClick={() => setVisible("none")}>close</button> 30 </StyleB> 31 ); 32}; 33 34const Wrap = styled.div` 35 button { 36 cursor: pointer; 37 } 38`; 39const StyleA = styled.div` 40 background: red; 41 padding: 1%; 42`; 43const StyleB = styled.div` 44 background: blue; 45 padding: 1%; 46`; 47

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

boolean型以外のstateでもアニメーションのトリガーにすることが可能なのでしょうか。

はい、in={text === 'foo'}のように、他のpropなりstateなりを見て、判定した結果としてのbooleanを渡せば問題ないかと思います。

投稿2020/02/11 09:11

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問