React-transition-groupをCSS in JSのaphroditeで使う
要素のfadein-outでトランジションをしたい
Reactでアプリケーションを作っている中で、モーダル的な要素を扱うのにfadein、fadeoutをしたくなりました。
現在のプロジェクトではCSS in JSとしてaphroditeを使っています。
いろいろ試行錯誤した結果、react-transition-groupで期待する動作を作れたので知見として公開したいと思います。
// モーダルにする予定のコンポーネント
import React from "react";
import { css, StyleSheet } from "aphrodite";
import { CSSTransition } from "react-transition-group";
const modal = ({ isShow }) => {
const styles = StyleSheet.create({
wrap: {
background: "red",
width: 200,
height: 200
},
enter: {
opacity: 0,
transition: "all 3s"
},
enterActive: {
opacity: 1
},
exit: {
opacity: 1,
transition: "all 3s"
},
exitActive: {
opacity: 0
}
});
return (
<CSSTransition
in={isShow}
mountOnEnter
unmountOnExit
classNames={{
enter: css(styles.enter),
enterActive: css(styles.enterActive),
exit: css(styles.exit),
exitActive: css(styles.exitActive)
}}
>
<div className={css(styles.wrap)}>modal</div>
</CSSTransition>
);
};
export default modal;
CSSTransitionGroupコンポーネントにclassNamesでaphroditeのスタイルを渡してあげる
ここが一番のポイントだと思います。
enter: css(styles.enter)
とすることで、enter時のaphroditeスタイルを渡すことができます。
ちなみにReact-transition-groupのversion1系ではclassName
ではなくtransitionName
です。
あとはドキュメントを読みつつなんとかなりました。
あとがき
CSS in JS使いながらReactでトランジッションの実装をどうするのか、やっと理解することができました。
最近はstyled componentsが流行っていますね。そちらではどうやるのか、若干興味があります。
とにかく、これで自由にAphroditeでtransitionを使いこなすことができそうなので、活用していきたい所存です
Author And Source
この問題について(React-transition-groupをCSS in JSのaphroditeで使う), 我々は、より多くの情報をここで見つけました https://qiita.com/sakapun/items/3a5b8f2c45ef32eda363著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .