ReactSpringでアニメーションReactアプリを作成する方法
序章
アニメーションは、アプリケーションに活気を与え、全体的なユーザーエクスペリエンスを向上させます。 React Spring は、コアアニメーションでスプリングのような物理演算を使用して、簡単に構成できるようにするアニメーションパッケージです。 スプリングは累積的です。つまり、スプリングには渡されたすべての値が記憶されます。
Springを使用すると、次のことができます。
- 測定単位から実際のデータまでの値を操作します。
- HTML属性を操作します。
- SVGパスを操作します。
- CSSを調整します。
このチュートリアルでは、react-spring
のSpring
コンポーネントを使用して、Reactアプリでスライディングとフェードのアニメーションを作成します。
ステップ1—プロジェクトの構成
create-react-app
コマンドでReact環境をセットアップします。 これにより、開始できる定型コードも生成されます。 これをインストールするには、次のコマンドを実行します。
npm install -g create-react-app
これで、これを使用してアプリを作成できます。
create-react-app react-spring-demo
react-spring-demo
という名前のフォルダーが作成されます。 そのディレクトリに移動し、react-spring
パッケージをインストールします。
yarn add react-spring
このプロジェクトのパッケージマネージャーとしてyarnを使用していることに気付くでしょう。これは、create-react-app
のデフォルトのパッケージマネージャーであるためです。 次のコマンドでインストールされていることを確認します。
npm install -g yarn
これで設定が完了したので、最初のアニメーションページを作成する準備が整いました。
ステップ2—スタイルのアニメーション化
春はスタイルをアニメーション化するために使用できます。 この例では、これを使用して、新しくロードされたページへの遷移をアニメーション化します。 これを行うには、App.js
のjsx
コンテキストをSpring
コンポーネントでラップします。
Springコンポーネントは、from
とto
の2つの小道具を取ります。これらは、アニメーションによって補間される値を表します。
この例では、ページが上からドロップダウンしてフェードインするような効果を作成します。 create-react-app
によって生成されたボイラープレートは、この効果を示すのに最適な背景を持っているため、今のところ変更する必要はありません。
ドロップ効果を実現するために、ページ要素の最初の上部マージンは負の値に設定され、アニメーション中に0
になります。 フェードイン効果を作成するには、不透明度の初期値を0
に設定し、アニメーションの最後でその値を1
にします。
App.js
ファイルは次のようになります。
App.js
// import React, { Component } from 'react'; import logo from './logo.svg'; import './App.css'; import { Spring } from 'react-spring'; class App extends Component { render() { return ( <Spring from={{ opacity: 0, marginTop: -1000 }} to={{ opacity: 1, marginTop: 0 }}> { props => ( <div className="App" style={ props }> <div > <header className="App-header" > <img src={logo} className="App-logo" alt="logo" /> <p> Edit <code>src/App.js</code> and save to reload. </p> <a className="App-link" href="https://reactjs.org" target="_blank" rel="noopener noreferrer" > Learn React </a> </header> </div> </div> ) } </Spring> ); } } export default App;
このコマンドを実行して、アプリケーションを起動します。
yarn start
ブラウザが開き、希望のドロップインとフェードインのアニメーションでページが読み込まれるのがわかります。
Spring
を使用すると、さまざまなスタイルを調整して、さらに多くのアニメーションを作成できます。 アプリを明るく保つために、不透明度と平行移動のアニメーション化に固執することをお勧めします。
ステップ3—アニメーションinnerText
Springを使用して、画面に表示されるコンテンツの値をアニメーション化することもできます。 これを示すために、Springを使用して0
で始まり、10
で終わるカウンターを作成します。 from
は初期値を保持し、to
は表示される最終値を保持します。
src
ディレクトリの下に、components
というフォルダを作成します。 そのディレクトリに、Counter.jsx
というファイルを作成します。 次のコードをCountrt.jsx
に追加します。
src / components / Countrt.jsx
import React from 'react'; import { Spring } from'react-spring'; const counter = () => ( <Spring from={{ number: 0 }} to={{ number: 10 }} {props => <div>{props.number.toFixed()}</div>} </Spring> ) export default counter;
カウンターをApp.js
にインポートし、ヘッダー要素の下に追加して、アプリでレンダリングします。
App.js
... import Counter from './components/Counter'; class App extends Component { render() { return ( <Spring from={{ opacity: 0, marginTop: -1000 }} to={{ opacity: 1, marginTop: 0 }}> { props => ( <div className="App" style={ props }> <div > <header className="App-header" > <img src={logo} className="App-logo" alt="logo" /> <p> Edit <code>src/App.js</code> and save to reload. </p> <a className="App-link" href="https://reactjs.org" target="_blank" rel="noopener noreferrer" > Learn React </a> <Counter /> </header> </div> </div> ) } </Spring> ); } } export default App;
ブラウザを開くと、Learn React
テキストの下にカウンターが表示されます。
アニメーションはすぐに発生するため、最初のページがアニメーションで表示されている間、アニメーションが表示されません。 これを修正するには、delay
プロップをミリ秒単位の値として追加して、アニメーションを遅らせることができます。 これは、アニメーションが開始するまで待機する時間です。
1秒の遅延を追加すると、カウンター関数は次のようになります。
src / components / Countrt.jsx
const counter = () => ( <Spring from={{ number: 0 }} to={{ number: 10 }} delay= '1000'> {props => <div>{props.number.toFixed()}</div>} </Spring> )
ページアニメーションが完了した後、カウンターが開始するようになりました。 この遅延は、config
プロペラを介して追加することもできます。これについては、Springの構成について説明します。
ステップ4—スプリングの調整config
前述のように、Springsは物理ベースです。 これは、期間と曲線を手動で処理する必要がないことを意味します。 これは、カバーしなければならない可能性のある重い数学の一部を取り除くので役立ちます。 ただし、config
プロパティを使用して、張力、摩擦、遅延、質量、およびその他の動作を微調整することにより、スプリングの動作を調整できます。
react-spring
には、スプリングを微調整するために使用できるプリセットが含まれています。 それらを使用するには、react-spring
パッケージからconfig
をインポートし、Springのconfig
プロパティにフィードする必要があります。 config
がどれであるかについての混乱を防ぐために、次の例を見てください。
import React from 'react'; import { Spring, config } from'react-spring'; const counter = () => ( <Spring from={{ number: 0 }} to={{ number: 10 }} delay= '1000' config = { config.molasses }> {props => <div>{props.number.toFixed()}</div>} </Spring> ) export default counter;
上記の例では、molasses
プリセットを使用しました。 これは、react-spring
によって提供される高張力および摩擦のプリセットです。 プリセットは通常、OutSpringのtension
およびfriction
プロパティを定義します。 これらのプリセットには、molasses
、default
、slow
、stiff
、およびwobbly
が含まれます。
プリセットは張力と摩擦のみを定義しますが、Springアニメーションの他のプロパティを手動で構成できます。 いくつかの例には、遅延、質量、速度、および期間が含まれます。 構成できるプロパティの完全なリストと、小道具として渡すことができる他のオプションについては、このページを確認してください。
ステップ5—フックを使用した使用法の調査
Reactチームは最近Reactフックを導入しました。 React Hooksを使用すると、データを永続的に保存して効果を引き起こすことができる機能コンポーネントを作成できます。これにより、機能コンポーネントに状態が追加されます。 この記事の執筆時点では、フックはReact 16.7 alpha
でのみ使用できます。 フックを使用するには、react
およびreact-dom
の16.7アルファバージョンにアップグレードする必要があります。
これを行うには、次のコマンドを実行します。
yarn remove react-dom && yarn add [email protected]
yarn remove react && yarn add [email protected]
react-spring
を使用すると、すぐに使用できるフックを使用できます。これにより、useSpring
というフックがエクスポートされます。 このフックを使用すると、データを定義および更新でき、通常、小道具として渡すのと同じ値で構成されます。 useSpring
はそれをアニメーションデータに変換します。 これを紹介するために、前のアニメーションが完了した後に、より多くのテキストをレンダリングする方法を見てみましょう。
Hooks.jsx
という名前の新しいコンポーネントファイルを作成し、次のコードを追加します。
Hooks.jsx
import React from 'react'; import { useSpring, animated } from 'react-spring'; const HookedComponent = () => { const [props] = useSpring({ opacity: 1, color: 'white', from: { opacity: 0 }, delay: '2000' }) return <animated.div style={props}>This text Faded in Using hooks</animated.div> } export default HookedComponent;
このコードは、引数のオブジェクトとしてスプリング設定をuseSpring
に渡します。 次に、これらの値をanimated
要素に渡し、アニメーション化されたスプリングを作成します。 遅延は2000
ミリ秒に設定され、カウンターが終了した後にフックされたコンポーネントからのテキストがフェードインするようにします。
これをApp.js
にインポートして、アプリでHookedComponent
を使用してみましょう。 create-react-app
から初期ボイラープレートコードの一部をクリーンアップした後。 最終的なアプリケーションを起動して、変更を確認します。
結論
これで、react-spring
を使用して試用アプリケーションをセットアップしました。 Springは、開発者から大量のワークロードを取り除きながら、Reactアプリケーションをアニメーション化する効果的な手段を提供します。
react-spring
の他のコンポーネントを使用して、Spring上に構築できます。 全体として、react-spring
には、アニメーションのニーズに応じてさまざまなオプションが含まれています。