parent
0fd4349292
commit
479667a74c
@ -1,137 +0,0 @@
|
|||||||
import React, { Component } from 'react'
|
|
||||||
import axios from '../../../17_React_Router/17_react_router_boilerplate/src/node_modules/axios'
|
|
||||||
import ReactDOM from 'react-dom'
|
|
||||||
import moment from '../../../17_React_Router/17_react_router_boilerplate/src/node_modules/moment'
|
|
||||||
import styled from 'styled-components'
|
|
||||||
import {
|
|
||||||
TiSocialLinkedinCircular,
|
|
||||||
TiSocialGithubCircular,
|
|
||||||
TiSocialTwitterCircular,
|
|
||||||
} from '../../../17_React_Router/17_react_router_boilerplate/src/node_modules/react-icons/ti'
|
|
||||||
|
|
||||||
const Title = styled.h1`
|
|
||||||
font-size: 70px;
|
|
||||||
font-weight: 300;
|
|
||||||
`
|
|
||||||
const SubTitle = styled.h2`
|
|
||||||
font-weight: 300;
|
|
||||||
`
|
|
||||||
|
|
||||||
const Header = styled.header`
|
|
||||||
background-color: #61dbfb;
|
|
||||||
padding: 25;
|
|
||||||
padding: 10px;
|
|
||||||
margin: 0;
|
|
||||||
`
|
|
||||||
|
|
||||||
class App extends Component {
|
|
||||||
constructor(props) {
|
|
||||||
super(props)
|
|
||||||
console.log('I am the constructor and I will be the first to run.')
|
|
||||||
this.state = {
|
|
||||||
firstName: 'John',
|
|
||||||
data: [],
|
|
||||||
day: 1,
|
|
||||||
congratulate: '',
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
componentDidMount() {
|
|
||||||
const API_URL = 'https://restcountries.eu/rest/v2/all'
|
|
||||||
axios
|
|
||||||
.get(API_URL)
|
|
||||||
.then((response) => {
|
|
||||||
this.setState({
|
|
||||||
data: response.data,
|
|
||||||
})
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.log(error)
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
static getDerivedStateFromProps(props, state) {
|
|
||||||
return { firstName: props.firstName }
|
|
||||||
}
|
|
||||||
shouldComponentUpdate(nextProps, nextState) {
|
|
||||||
console.log(nextProps, nextState)
|
|
||||||
console.log(nextState.day)
|
|
||||||
if (nextState.day > 31) {
|
|
||||||
return false
|
|
||||||
} else {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
doChallenge = () => {
|
|
||||||
this.setState({
|
|
||||||
day: this.state.day + 1,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
renderCountries = () => {
|
|
||||||
return this.state.data.map((country) => {
|
|
||||||
const languageOrLanguages =
|
|
||||||
country.languages.length > 1 ? 'Langauges' : 'Language'
|
|
||||||
const formatLanguages = country.languages
|
|
||||||
.map(({ name }) => name)
|
|
||||||
.join(', ')
|
|
||||||
return (
|
|
||||||
<div>
|
|
||||||
<div>
|
|
||||||
{' '}
|
|
||||||
<img src={country.flag} alt={country.name} />{' '}
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h1>{country.name}</h1>
|
|
||||||
<p>Capital: {country.capital}</p>
|
|
||||||
<p>
|
|
||||||
{languageOrLanguages}: {formatLanguages}
|
|
||||||
</p>
|
|
||||||
<p>Population: {country.population}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
componentDidUpdate(prevProps, prevState) {
|
|
||||||
if (prevState.day == 30) {
|
|
||||||
this.setState({
|
|
||||||
congratulate: 'Congratulations,Challenge has been completed',
|
|
||||||
})
|
|
||||||
}
|
|
||||||
console.log(prevState, prevProps)
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
return (
|
|
||||||
<div className='App'>
|
|
||||||
<Header>
|
|
||||||
<Title>30 Days Of React</Title>
|
|
||||||
<h2>Getting Started React</h2>
|
|
||||||
<h3>JavaScript Library</h3>
|
|
||||||
<p>Instructor: Asabeneh Yetayey</p>
|
|
||||||
<small>Oct 15, 2020</small>
|
|
||||||
</Header>
|
|
||||||
<p>This challenge was started {moment('2020-10-01').fromNow()}</p>
|
|
||||||
<p>The challenge will be over in {moment('2020-10-30').fromNow()}</p>
|
|
||||||
<p>Today is {moment(new Date()).format('MMMM DD, YYYY HH:mm')}</p>
|
|
||||||
<h1>React Component Life Cycle</h1>
|
|
||||||
<h1>Calling API</h1>
|
|
||||||
<TiSocialLinkedinCircular />
|
|
||||||
<TiSocialGithubCircular />
|
|
||||||
<TiSocialTwitterCircular />
|
|
||||||
|
|
||||||
<button onClick={this.doChallenge}>Do Challenge</button>
|
|
||||||
<p>Challenge: Day {this.state.day}</p>
|
|
||||||
{this.state.congratulate && <h2>{this.state.congratulate}</h2>}
|
|
||||||
<div>
|
|
||||||
<p>There are {this.state.data.length} countries in the api</p>
|
|
||||||
<div className='countries-wrapper'>{this.renderCountries()}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const rootElement = document.getElementById('root')
|
|
||||||
ReactDOM.render(<App />, rootElement)
|
|
Loading…
Reference in new issue