Props

A prop is any input that you pass to a React component. Props are given as an object and are the first argument to a component function, like this

export default function Greeting(props) {
    return <h1>Hello {props.name}</h1>
} 
import Greeting from "./components/Greeting.js"

export default App() {
    return <Greeting name={"Ali"} />;
}

ES6 has a new syntax called destructuring which makes props easier to work with:

export default function Greeting(props) {
    const { name } = props;
    return <h1>Hello {name}</h1>
} 
export default function Greeting({ name }) {
    return <h1>Hello {name}</h1>
} 

In class components, props are passed to the class constructor.

import React, { Component } from "react";

export default class Greeting extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return <h1>Hello {this.props.name}</h1>
    }    
} 

One crucial thing to know is that props are mean to be read-only. Therefore, components that receive props must not change them.

The prop-types library

First, install it:

npm install prop-types

Then, import and use it!

import PropTypes from "prop-types";

export default function Greeting(props) {
    const { name } = props;
    return <h1>Hello {name}</h1>
} 

Greeting.propTypes = {
  name: PropTypes.string.isRequired
};

PropTypes is made to "type check" the props.