昨日の記事で少しだけ話題に出したサイドバーメニューを実装したので、その手順をまとめ。
使用したライブラリは「react-native-side-menu」です。
GitHub のページはこちらから。
GitHub – alessiocancian/react-native-side-menu: Side menu component for React Native
https://github.com/alessiocancian/react-native-side-menu
実装方法ですが、まず下記のコマンドでライブラリをインストールします。
npm install react-native-side-menu-updated --save
上記の実行が完了したら、プロジェクトを修正していきます。
まず、サイドバーメニューに表示したい内容を記述したファイルを用意します。
私は Menu.js というファイル名で、下記のように記述しました。
import React, { Component } from 'react';
import { withRouter } from "react-router";
import { View, StatusBar } from 'react-native';
import { ListItem } from 'react-native-elements'
class Menu extends React.Component {
render() {
return (
<View style={{paddingTop: StatusBar.currentHeight}}>
<ListItem>
<ListItem.Content>
<ListItem.Title>プロフィール</ListItem.Title>
</ListItem.Content>
<ListItem.Chevron />
</ListItem>
<ListItem>
<ListItem.Content>
<ListItem.Title>アプリ設定</ListItem.Title>
</ListItem.Content>
<ListItem.Chevron />
</ListItem>
<ListItem bottomDivider>
<ListItem.Content>
<ListItem.Title>利用規約</ListItem.Title>
</ListItem.Content>
<ListItem.Chevron />
</ListItem>
<ListItem>
<ListItem.Content>
<ListItem.Title>ログアウト</ListItem.Title>
</ListItem.Content>
</ListItem>
</View>
);
}
}
export default withRouter(Menu);
上記のようなファイルを追加したら、次にサイドバーメニューを表示したいページのコードを修正していきます。
import React, { Component } from 'react';
import { View } from 'react-native';
import SideMenu from 'react-native-side-menu-updated';
import Menu from './Menu';
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
isMenuOpen: false,
}
this.updateMenuState = this.updateMenuState.bind(this);
}
updateMenuState(isOpen) {
this.setState({ isMenuOpen: isOpen });
}
render() {
const menu = <Menu />;
return (
<SideMenu
menu={menu}
isOpen={this.state.isMenuOpen}
onChange={isOpen => this.updateMenuState(isOpen)}>
<View>
...
</View>
</SideMenu>
);
}
}
export default App;
まず、3行目でライブラリをインストールします。
で、このインストールした SideMenu でサイドバーメニューを表示したいページをまるっと囲んでしまいます。
コードでいうと、20行目からの記述です。
なお、上記のコードでは省略しましたが <View></View> で囲んである箇所が、サイドバーメニューを表示したいページのコンポーネントです。
サイドバーメニューが表示されているか否かについては、state の isOpenMenu で管理しており、アプリ画面を左端から右へとスワイプし、サイドバーメニューが表示されたタイミングで、この値を書き換えています。
なお、<SideMenu menu={menu}></SideMenu> とするだけでも実は動きます。
ですが私の場合、ヘッダーに設置したハンバーガーメニューアイコンをタップしてサイドバーメニューを表示するという機能を実装したかったため、上記のように記述しました。
追加する記述は以上です。
実際に実行したところ、無事意図した通りのサイドバーメニューを表示することができました!
他にも、表示するサイドバーメニューの幅を設定できたり、右端からサイドバーメニューを表示するようにするなど、かなり色々な設定ができそうでした。
詳しくは、GitHub のページをご参照ください。
以上、React Native でサイドバーメニューを表示するためのライブラリ「react-native-side-menu」のご紹介でした。
ご参考になれば幸いです。