project ┬ src ┬ components │ │ ├ apps.js │ │ ├ footer.js │ │ ├ header.js │ │ ├ main.js │ │ └ lesson.js │ └ index.js └ index.html
<!DOCTYPE html>
<html>
<head>
<title>React App</title>
</head>
<body>
<div id="root"></div>
<script src="bundle.js"></script>
</body>
</html>
import React from 'react';
import ReactDOM from 'react-dom';
import App from './components/App';
ReactDOM.render(<App />, document.getElementById('root'));
import React from 'react';
import Header from './Header';
import Main from './Main';
import Footer from './Footer';
class App extends React.Component {
render() {
return (
<div>
<Header />
<Main />
<Footer />
</div>
);
}
}
import React from 'react';
class Lesson extends React.Component {
constructor(props) {
super(props);
this.state = {isModalOpen: false};
}
handleClickLesson() {
this.setState({isModalOpen: true});
}
handleClickClose() {
this.setState({isModalOpen: false});
}
render() {
let modal;
if (this.state.isModalOpen) {
modal = (
<div className='modal'>
<div className='modal-inner'>
<div className='modal-header'></div>
<div className='modal-introduction'>
<h2>{this.props.name}</h2>
<p>{this.props.introduction}</p>
</div>
<button
className='modal-close-btn'
onClick={() => {this.handleClickClose()}}
>
とじる
</button>
</div>
</div>
);
}
return (
<div className='lesson-card'>
<div
className='lesson-item'
onClick={() => {this.handleClickLesson()}}
>
<p>{this.props.name}</p>
<img src={this.props.image} />
</div>
{modal}
</div>
);
}
}
export default Lesson;
import React from 'react';
import Lesson from './Lesson';
class Main extends React.Component {
render() {
const lessonList = [
{
name: 'HTML & CSS',
image: 'https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/react/html.svg',
},
{
name: 'Sass',
image: 'https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/react/sass.svg',
},
{
name: 'JavaScript',
image: 'https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/react/es6.svg',
},
{
name: 'React',
image: 'https://s3-ap-northeast-1.amazonaws.com/progate/shared/images/lesson/react/react.svg',
},
];
return (
<div className='main-wrapper'>
<div className='main'>
<div className='copy-container'>
<h1>Hello, World.</h1>
<h2>プログラミングの世界へようこそ!</h2>
</div>
<div className='lesson-container'>
<h3 className='section-title'>学べるレッスン</h3>
{lessonList.map( (lessonItem) => {
return(
<Lesson
name = {lessonItem.name}
image = {lessonItem.image}
/>
);
})}
</div>
</div>
</div>
);
}
}
export default Main;