Container Components
index.css
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
"Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
monospace;
}
:root {
--main-container-color: #fef3c7;
--main-border-color: #e5e7eb;
--main-background-color: #10b981;
--secondary-background-color: #f9fafb;
--secondary-background-color-light: #fff;
--main-font-color: #374151;
--secondary-font-color: #f3f4f6;
--danger-font-color: #ef4444;
--label-font-color: #6366f1;
--main-box-shadow: rgba(50, 50, 93, 0.25) 0px 2px 5px -1px,
rgba(0, 0, 0, 0.3) 0px 1px 3px -1px;
--main-box-shadow-elevated: rgba(17, 17, 26, 0.1) 0px 8px 24px,
rgba(17, 17, 26, 0.1) 0px 16px 56px, rgba(17, 17, 26, 0.1) 0px 24px 80px;
--main-box-shadow-inset: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06);
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace;
}
Create folder Components/Navbar.
index.jsx
import React from "react";
import styles from "./Navbar.module.css"
import searchIcon from '../../assets/search-icon.svg'
import emojiIcon from '../../assets/emoji-icon.svg'
const Navbar = () => {
return(
<nav className={styles.nav}>
<img style={{ marginRight: 8 }} className={styles.navIcon} src={emojiIcon} alt="emoji icon" />
<img style={{ marginTop: 3 }} className={styles.navIcon} src={searchIcon} alt="search icon" />
<span className={styles.navTitle}> er </span>
</nav>
)
}
export default Navbar
Navbar.module.css
.nav {
display: flex;
justify-content: center;
align-items: center;
text-align: center;
background-color: var(--main-background-color);
padding: 0 16px;
height: 55px;
}
.navTitle {
color: var(--secondary-font-color);
font-size: 24px;
font-weight: bold;
}
.navIcon {
height: 32px;
width: 32px;
}
Container create folder
index.jsx
import React from "react";
import PropTypes from 'prop-types';
import styles from './Container.module.css';
const Container = ({ children }) => {
return(
<section className={styles.container}>
{children}
</section>
)
}
Container.propTypes = {
children: PropTypes.node
}
export default Container
Container.module.css
.container {
display: flex;
flex-direction: column;
min-height: calc(100vh = 50px);
max-width: 480px;
padding: 16px;
margin: 0 auto;
background-color: var(--main-container-color);
}
App.js
import React from 'react';
import { useState, useEffect } from 'react';
import axios from 'axios';
import Navbar from './Components/Navbar'
import Container from './Components/Container';
import './App.css';
function App() {
const [emojisData, setEmojisData] = useState([]);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(false)
useEffect(() => {
async function fetchEmojis() {
setLoading(true)
try {
const res = await axios.get('https://run.mocky.io/v3/fe964130-70d0-430f-b839-e55081423c28')
setEmojisData(res.data)
setLoading(false)
} catch (error) {
console.error(error)
setError(true)
setLoading(false)
}
}
fetchEmojis()
}, [])
return (
<>
<Navbar />
<Container>
<h1>Hello</h1>
{loading && <p>Loading..</p>}
{error && <p>Opsss Error....</p>}
{emojisData.length > 0 && <p>Data sukses di ambil</p>}
</Container>
</>
);
}
export default App;
Last updated
Was this helpful?