Code icon

REACT - MEME GENERATOR

Links


    // IMG
    


    // INDEX.JS
    import React from 'react';
    import ReactDOM from 'react-dom';
    import './index.css';
    import App from './App.js'

    ReactDOM.render( <App/>, document.getElementById('root'));


    // APP.JS
    //CONTAINER COMPONENT ARCHITECTURE
    import React from 'react'
    import Header from './components/Header'
    import MemeGenerator from './components/MemeGenerator'


    function App(){
    return(
        <div>
        <Header/>
        <MemeGenerator/>
        </div>
    )
    }

export default App;

    


    // HEADER.JS 
    import React from 'react';

    function Header(){
        return (
       <header>
           <img 
            src="http://i.imgflip.com/1bij.jpg"
            alt="Problem?"
            />
           <p>Meme Generator

</header> ) } export default Header

    // MEMEGENERATOR.JS

    import React, {Component} from 'react';

    class  MemeGenerator extends Component{
        constructor(){
            super()
            this.state = {
                topText: "",
                bottomText:"",
                randomImg: "http://i.imgflip.com/1bij.jpg",
                allMemeImgs: []
            }
    
            this.handleChange = this.handleChange.bind(this)
            this.handleSubmit = this.handleSubmit.bind(this)
        }
    
        componentDidMount(){
            fetch("https://api.imgflip.com/get_memes")
            .then(response => response.json())
            .then(response => {
                const {memes} = response.data
                console.log(memes[8])
                this.setState({allMemeImgs: memes})
            })
        }
    
        handleChange(event){
            console.log("Working")
            const {name, value} = event.target
            this.setState({[name]:value})
        }
    
        handleSubmit(event){
            event.preventDefault()
            const randNum = Math.floor(Math.random() * this.state.allMemeImgs.lengh)
            // console.log(randNum)
            const randMemeImg = this.state.allMemeImgs[randNum].url
            this.setState({randomImg: randMemeImg})
        }
    
        render(){
            return(
            <div>
                <form className="meme-form" onSubmit={this.handleSubmit}>
                    <input type="text" name="topText" placeholder="top Text" value={this.state.topText} onChange={this.handleChange}/>
                    <input type="text" name="bottomText" placeholder="bottom Text" value={this.state.bottomText} onChange={this.handleChange}/>
    
                    <button>Gen</button>
                </form>
                <div className="meme">
                    <img 
                    src={this.state.randomImg}
                    alt="Problem?"
                    />
                    <h2 className="top">{this.state.topText}</h2>
                    <h2 className="bottom">{this.state.bottomText}</h2>
                </div>
            </div>
            )
        
    }
    }
    
    export default MemeGenerator
    


    // INDEX.CSS
    header {
        height: 100px;
        display: flex;
        align-items: center;
        background: #6441a5;
        background: -webkit-linear-gradient(to right, #2a0845, #6441a5);
        background: linear-gradient(to right, #2a0845, #6441a5);
      }
      
      header > img {
        height: 80%;
        margin-left: 100px;
      }
      
      header > p {
        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
        color: whitesmoke;
        font-size: 50px;
        margin-left: 60px;
      }
      
      .meme {
        position: relative;
        width: 90%;
        margin: auto;
      }
      
      .meme > img {
        width: 100%;
      }
      
      .meme > h2 {
        position: absolute;
      }
      
      form input,
      button {
        height: 30px;
      }
      
      button {
        border: none;
        background-color: #6441a5;
        color: white;
        font-size: 25px;
      }
      
      .top {
      }
      
      .bottom {
      }