1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【React-Rails】React-RailsでMaterial-UIの部品を実装する手順

Last updated at Posted at 2021-04-04

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
image.png

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サーバーを起動しブラウザに表示させてみましょう。

image.png

実装方法等で、意見等あればコメントいただけると幸いです!

参考

Material-UI https://material-ui.com/ja/
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?