Created
January 3, 2018 19:59
-
-
Save unaipme/b4f1438e448a809c6d8cb6e6aa8a0c44 to your computer and use it in GitHub Desktop.
React.js adibidea
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import React, { Component } from 'react'; | |
import ReactDOM from 'react-dom'; | |
/* | |
todo lo que está entre llaves, {}, es interpretado como jsx. | |
una cosa de jsx es que no puedes escribir el css directamente, sino que tienes que utilizar un objecto de javascript como abajo | |
*/ | |
class Header extends Component { | |
render() { | |
return ( | |
<div style={{padding: "10px", backgroundColor: "#eee", fontFamily: "Comic Sans MS", textAlign: "center"}}> | |
<h3>Ongi etorri!</h3> | |
</div> | |
); | |
} | |
} | |
/* | |
cada componente de react tiene estado, que es un objecto javascript. cada vez que cambia el estado el componente se vuelve a renderizar | |
cuando se clica el boton, se ejecuta la funcion toggle del componente, que cambia la variable "visible" del estado | |
lo de entre las llaves {} es jsx, como he dicho antes. por lo tanto, {this.state.visible ? "Hide" : "Show"} mostrara el texto "Hide" cuando visible | |
sea true, y viceversa. (un if else de toda la vida) | |
si no me interesa el else, habria que ponerlo como abajo, con { <condicion> && <lo que queremos mostrar> } | |
*/ | |
class MainContent extends Component { | |
constructor(props) { | |
super(props); | |
// el estado se puede inicializar así en el constructor. despues, solo se puede modificar con la funcion setState, como en la funcion de debajo | |
// si el componente no necesita estado, no hace falta poner constructor. pero si se pone constructor tiene que ser con el atributo props y | |
// llamando a super(props); | |
this.state = { | |
visible: false | |
}; | |
} | |
toggle() { | |
this.setState({visible: !this.state.visible}); | |
} | |
render() { | |
return ( | |
<div style={{padding: "10px"}}> | |
<p>Lorem ipsum</p> | |
<button type="button" onClick={() => this.toggle()}>{this.state.visible ? "Hide" : "Show"}</button> | |
{ this.state.visible && | |
<h3>Sorpresa!</h3> | |
} | |
</div> | |
); | |
} | |
} | |
// en la clase App pongo <Footer> y le añado el atributo copyright. se puede acceder a estas propiedades mediante el objeto this.props, como debajo | |
// en este caso lo que hago con || es que si this.props.copyright no esta difinido, imprima el texto "Alguien". prueba a borrar el atributo copyright | |
class Footer extends Component { | |
render() { | |
return ( | |
<div style={{padding: "3px", backgroundColor:"#222", color: "#eee", position: "fixed", bottom: 0, width: "100%"}}> | |
© {this.props.copyright || "Alguien"} | |
</div> | |
); | |
} | |
} | |
class App extends Component { | |
render() { | |
return ( | |
<div> | |
<Header /> | |
<MainContent /> | |
<Footer copyright="Unai Perez" /> | |
</div> | |
); | |
} | |
} | |
ReactDOM.render( | |
<App />, | |
document.getElementById("root") | |
); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment