React prop types

Created By: chatGPT

In React, prop types are a way to ensure that the components receive the correct type of data. Utilizing prop types, you can define the types of props that a component is expected to receive, adding an extra layer of validation. This helps in catching bugs during development. Here’s how you can use prop types in your React components.
import React from 'react';
import PropTypes from 'prop-types';

const MyComponent = ({ title, count }) => {
    return (
        <div>
            <h1>{title}</h1>
            <p>Count: {count}</p>
        </div>
    );
};

MyComponent.propTypes = {
    title: PropTypes.string.isRequired,
    count: PropTypes.number.isRequired,
};

export default MyComponent;
In the example above, we have defined a functional component called MyComponent, which expects two props: title and count. By using PropTypes.string.isRequired and PropTypes.number.isRequired, we ensure that both props must be provided and that they should be of the correct type, otherwise a warning will be logged in the console.
MyComponent.propTypes = {
    title: PropTypes.string.isRequired,
    count: PropTypes.number.isRequired,
};
If you want to define optional props, you can do so by omitting the isRequired validator. Here’s how you can specify a default value for an optional prop using defaultProps.
MyComponent.defaultProps = {
    count: 0,
};
Now, if the count prop is not provided, it will default to 0. Prop types can also validate more complex data types, such as arrays, objects, and even custom validation. Here is an example of validating an array of objects.
MyComponent.propTypes = {
    items: PropTypes.arrayOf(PropTypes.shape({
        id: PropTypes.number.isRequired,
        name: PropTypes.string.isRequired,
    })).isRequired,
};
In this example, items is an array of objects that should each have an id of type number and a name of type string. Using prop types not only makes your code cleaner but also enhances the maintainability and readability of your React components.
Introduction And SetupComponentsPropsStateLifecycle MethodsHooksContext APIJsx SyntaxVirtual DomEvent HandlingFormsRoutingPerformance OptimizationError BoundariesHigher Order ComponentsRender PropsPortalsFragmentsRefsControlled ComponentsUncontrolled ComponentsMemoizationSuspenseLazy LoadingProp TypesDefault PropsConditional RenderingList And KeysAccessibility (a11y)State ManagementTestingCustom HooksUseEffectUseStateUseContextUseReducerUseMemoUseCallbackUseRefUseLayoutEffectUseImperativeHandleUseDebugValueAutomatic BatchingSuspense For Data FetchingStrict ModeForward RefsCreateContextLazyUseTransitionUseDeferredValueUseId