Props

Contactar con el profesor

Sintácticamente una prop es similar a los atributos de HTML. Sirve para transferir información de un componente a otro.

export const Hello = (props) => <h2>{props.title}</h2>;
export default () => <Hello title="hola pepito"/>;

children

import Box from './components/box';

export default () => <div>
    <Box>Texto 1</Box>
    <Box>Texto 2</Box>
</div>
export default (props) => <div>
    {props.children}
</div>;

Destructuring del props

const App = () => <Prueba prop1={3} prop2={4} />;

const Prueba = ({prop1, prop2}) => <div>
    {/* gracias al destructuring no tengo que usar this.props.prop1 para imprimir la propiedad prop1  */}  
    <p>{prop1}</p>
    <p>{prop2}</p>
  </div>;

Ejercicios props

1. Ejercicio – props

Crear un componente llamado Post que debe imprimir el valor de las props postTileauthor, y contenido (children).

export default () => <div>
        <Post postTitle="Viaje a la luna" author="Julio Verne">Texto 1</Post>
        <Post postTitle="Viaje a Marte" author="Pablo Mon">Texto 2</Post>
    </div>;

2. Ejercicios de componentes modificados.

Ahora modificaremos los ejercicios que vimos en las secciones anteriores. Vamos a modificar el componente Form para que solamente reciba el valor y pinte la respuesta. Para ello, le pasaremos el valor mediante props. Toda la lógica estará en el componente App.

2.1 Convertir euros en dólares.

2.2 Calcular grados Fahrenheit.

2.3 Calcular la superficie de un rectángulo.

3. Ejercicio coste hotel.

Haremos una aplicación para calcular el coste de un viaje. Para ello desarrollaremos un componente App que tomarará del usuario el número de noches.

Recogeremos el número de noches, utilizando useState:

<input type="text" onChange={ e => setNoches(e.target.value) } />

Luego le pasaremos este valor como prop a dos componentes:

  • Componente CosteHotel: múltiplica el número de noches por los 140 euros que cuesta cada noche.
  • Componente CosteAlquiler:
    • Cada día de alquiler cuesta 40 €.
    • Si alquilas un coche por 3 días o más, obtienes un descuento de 20€ sobre el total.
    • Si alquilas un coche por 7 días o más, obtienes un descuento de 50€ sobre el total (no acumulable con los 20€ de haber alquilado por más de 3 días).

Default props

En caso de que la prop no reciba ningún valor, el default prop será su valor por defecto

const Prueba = (props) => (
  <div>{props.title}</div> 
);

Prueba.defaultProps = {
  title: 'Amor'
}

const App = _ => (
  <Prueba />
);

Interpretar el HTML de una prop

export default () => <Prueba rawHtml={"<strong>hola</strong>"} />;

const Prueba = ({rawHtml}) => <div>
  <div dangerouslySetInnerHTML={{__html: rawHtml}}/>
  {/*El siguiente código no funcionaría*/}
  <div>{rawHtml}</div>
</div>;

Pasar una prop del hijo al padre

app.js
export default () => {

const changePadre = param =>  alert(param);

return <div>
    <MiComponente onSomeEvent={changePadre} />
  </div>;
}
miComponente.js
export default ({onSomeEvent}) => <button onClick={() => onSomeEvent(3)}>Pulame</button>;
Descargar Recurso

Ejercicio

Programa una aplicación con dos componentes. En uno de ellos, el usuario escribirá dos números y se calculará su suma. Ese componente, enviará el resultado de la operación al componente padre que a su vez se la enviará al segundo componente que será el encargado de mostrar la solución.

← Componentes en React
Renderizado condicional →

Aviso Legal | Política de privacidad