oo

React Component Utilities Reference

Several useful tools are available to help you build high-performance components and applications in Liferay DXP using React:

frontend-js-react-web Module

The frontend-js-react-web shared module provides a single common version of React that you can use in all consumers of React across Liferay DXP. The module includes a standard way to mount (i.e. render) a React component in the context of Liferay DXP, taking care of such details as unmounting the component (cleanly disposing of it) when its corresponding portlet is destroyed. An example is shown below:

import {render} from 'frontend-js-react-web';
render(
renderable,
renderData,
container
);

These parameters are required:

renderable: The React element or a function that returns one to render

renderData: Data to pass to the renderable component as props

container: The DOM node where the component is to be mounted (e.g. document.getElementById(placeholderId).parentElement)

Common Hooks

The frontend-js-react-web module also includes a set of common hooks that you can use to mix-in useful behaviors to your components without having to duplicate code:

usePrevious hook can be used for comparing current and previous values (state, props or any arbitrary value).

useIsMounted hook can be used for determining whether a component is still mounted. An example is shown below:

import {useIsMounted} from 'frontend-js-react-web';

const InlineConfirm = props => {
    const isMounted = useIsMounted();

    const _handleConfirmButtonClick = () => {
        props.onConfirmButtonClick().then(() => {
            if (isMounted()) {
                setPerformingAction(false);
            }
        });
    };

    return <button onClick={handleConfirmButtonClick} />;

};

useEventListener hook can be used for adding an event listener on mount and removing it on unmount. Here’s an example:

import {useEventListener} from 'frontend-js-react-web';

function OverlayContainer({root, allowEdit}) {
    useEventListener('keydown', handleKeydown, true, document);
    useEventListener('click', handleClick, false, document);

    return <></>;
}

React Component Tag

The <react:component> tag adds a React view to your JSP. An example is shown below:

<react:component
    data="<%= data %>"
    module="js/pages/form-view/EditFormViewApp.es"
/>

It wraps the render() function for the frontend-js-react-web module mentioned above. The data passed here is passed as renderData and the module must export a renderable (component function or React element as mentioned above).