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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。