React-RailsでMaterial-UIの部品を実装する手順について紹介します。
1.Material-UIのページで実装したい部品を選択する
https://material-ui.com/ja/getting-start今回は、SimpleTabを実装することにします。
ちなみに、codeの上にある「Edit in CodeSandbox」でいろいろいじることができます。
https://material-ui.com/components/tabs/#simple-tabs
2.実装したい部品のコードを表示し、コピーする
コードの上の「show the full source」を押下して、ソースコードを表示して、コピーしてください。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/927880/9819abb8-0bf3-cf7b-5376-cc01f8b93976.png)なお、JSとTSの2種類があるので、使用しているほうを選んでください。
筆者はJSを今回は選択しました。
3.Railsに新規ファイルを作成し、コードを張り付ける
javascript>components直下にファイルを作り、ソースコードをそのまま貼り付けます。 ファイル名はわかりやすく「SimpleTab.js」という名前にしました。ファイルの置き場所ですが恐らく、packsに張り付けるのが正解な気がしていますが、今回はcomponents直下に置いておきます。(部品なので。。。。。)
SimpleTab.js
import React from 'react';
import PropTypes from 'prop-types';
import { makeStyles } from '@material-ui/core/styles';
import AppBar from '@material-ui/core/AppBar';
import Tabs from '@material-ui/core/Tabs';
import Tab from '@material-ui/core/Tab';
import Typography from '@material-ui/core/Typography';
import Box from '@material-ui/core/Box';
function TabPanel(props) {
const { children, value, index, ...other } = props;
return (
<div
role="tabpanel"
hidden={value !== index}
id={`simple-tabpanel-${index}`}
aria-labelledby={`simple-tab-${index}`}
{...other}
>
{value === index && (
<Box p={3}>
<Typography>{children}</Typography>
</Box>
)}
</div>
);
}
TabPanel.propTypes = {
children: PropTypes.node,
index: PropTypes.any.isRequired,
value: PropTypes.any.isRequired,
};
function a11yProps(index) {
return {
id: `simple-tab-${index}`,
'aria-controls': `simple-tabpanel-${index}`,
};
}
const useStyles = makeStyles((theme) => ({
root: {
flexGrow: 1,
backgroundColor: theme.palette.background.paper,
},
}));
export default function SimpleTabs() {
const classes = useStyles();
const [value, setValue] = React.useState(0);
const handleChange = (event, newValue) => {
setValue(newValue);
};
return (
<div className={classes.root}>
<AppBar position="static">
<Tabs value={value} onChange={handleChange} aria-label="simple tabs example">
<Tab label="Item One" {...a11yProps(0)} />
<Tab label="Item Two" {...a11yProps(1)} />
<Tab label="Item Three" {...a11yProps(2)} />
</Tabs>
</AppBar>
<TabPanel value={value} index={0}>
Item One
</TabPanel>
<TabPanel value={value} index={1}>
Item Two
</TabPanel>
<TabPanel value={value} index={2}>
Item Three
</TabPanel>
</div>
);
}
4.表示したいファイルにimportして、タグを書き込む
表示したい対象のファイルにimport文を書きます。 importで指定した文字がタグの名前として使えるようになるので、それを書きこみます。筆者はjsファイルから表示させたかったので、index.jsに書き込みました。(index.jsもcomponents直下に配置しております)
index.js
import React from "react"
import PropTypes from "prop-types"
import SimpleTabs from "./SimpleTabs"
class Index extends React.Component {
render () {
return (
<React.Fragment>
<SimpleTabs />
</React.Fragment>
);
}
}
Index.propTypes = {
greeting: PropTypes.string
};
export default Index
書いたら保存して、Railsサーバーを起動しブラウザに表示させてみましょう。
実装方法等で、意見等あればコメントいただけると幸いです!