Skip to content

Question 3

Design a React class component with prop validation using PropTypes to ensure correct data types for props?

type       value          valid
Array       1,2,3,4,5      true
Boolean     False          true
String       GFG           true
Number        100          true
type        value          valid
Array      Not an array   false
Boolean        1          false
String       1234          false
Number     Not a number    false

App.jsx

jsx
import React from "react";
import PropTypes from "prop-types";

class App extends React.Component {
  render() {
    const { propArray, propBool, propNumber, propString } = this.props;

    return (
      <div>
        <h2>Simple ReactJS Props validation example</h2>
        <table>
          <tbody>
            <tr>
              <th>Type</th>
              <th>Value</th>
              <th>Valid</th>
            </tr>
            <tr>
              <td>Array</td>
              <td>{String(propArray)}</td>
              <td>{Array.isArray(propArray) ? "true" : "false"}</td>
            </tr>
            <tr>
              <td>Boolean</td>
              <td>{String(propBool)}</td>
              <td>{typeof propBool === "boolean" ? "true" : "false"}</td>
            </tr>
            <tr>
              <td>String</td>
              <td>{propString}</td>
              <td>{typeof propString === "string" ? "true" : "false"}</td>
            </tr>
            <tr>
              <td>Number</td>
              <td>{propNumber}</td>
              <td>{typeof propNumber === "number" ? "true" : "false"}</td>
            </tr>
          </tbody>
        </table>
      </div>
    );
  }
}

// PropTypes for type validation
App.propTypes = {
  propArray: PropTypes.array.isRequired,
  propBool: PropTypes.bool.isRequired,
  propNumber: PropTypes.number,
  propString: PropTypes.string,
};

// Default props for valid demonstration
App.defaultProps = {
  propArray: [1, 2, 3, 4, 5],
  propBool: false,
  propNumber: 100,
  propString: "GFG",
};

export default App;

Functional Component

App.jsx

jsx
import React from "react";
import PropTypes from "prop-types";

function App({ propArray, propBool, propNumber, propString }) {
  return (
    <div>
      <h2>Simple ReactJS Props validation example</h2>
      <table>
        <tbody>
          <tr>
            <th>Type</th>
            <th>Value</th>
            <th>Valid</th>
          </tr>
          <tr>
            <td>Array</td>
            <td>{String(propArray)}</td>
            <td>{Array.isArray(propArray) ? "true" : "false"}</td>
          </tr>
          <tr>
            <td>Boolean</td>
            <td>{String(propBool)}</td>
            <td>{typeof propBool === "boolean" ? "true" : "false"}</td>
          </tr>
          <tr>
            <td>String</td>
            <td>{propString}</td>
            <td>{typeof propString === "string" ? "true" : "false"}</td>
          </tr>
          <tr>
            <td>Number</td>
            <td>{propNumber}</td>
            <td>{typeof propNumber === "number" ? "true" : "false"}</td>
          </tr>
        </tbody>
      </table>
    </div>
  );
}

// PropTypes for validation
App.propTypes = {
  propArray: PropTypes.array.isRequired,
  propBool: PropTypes.bool.isRequired,
  propNumber: PropTypes.number,
  propString: PropTypes.string,
};

// Default props (valid examples)
App.defaultProps = {
  propArray: [1, 2, 3, 4, 5],
  propBool: false,
  propNumber: 100,
  propString: "GFG",
};

export default App;

Made with ❤️ for students, by a fellow learner.