React in NRP Repositories
React is used in NRP repositories for building interactive user interface components within a server-side rendered application architecture based on InvenioRDM. Unlike traditional Single Page Applications, React here is used for embedding dynamic (mini)apps within Jinja-rendered pages, combining SEO benefits with rich client-side interactivity.
This section covers React-specific topics. For server-side templating with Jinja and JinjaX, see the Templating overview.
Overview
React in NRP repositories powers the most dynamic and interactive parts of the user interface:
- Search interfaces - Faceted filtering, result lists, sorting
- Deposit forms - Formik-powered inputs, validation, file uploads, and submission
- Dashboard components - Real-time data visualization, interactive controls
Architecture
React is integrated through the following integration flow:
The integration process involves:
- Webpack entry points defined in
webpack.pyfiles - Python configuration files specifying JavaScript entry points - Template mount points - Jinja/JinjaX templates render DOM elements with unique IDs that serve as React mount points
- JS bundle inclusion - Templates include pre-built JavaScript bundles via
{{ webpack['bundle.js'] }}that mount and run React apps - Data passing - Templates use
data-*attributes or hidden inputs to pass initial state and configuration to React apps - Component overriding mechanism for customization without modifying core code
Explore React Topics
Learn how to add JavaScript entry points, configure webpack, and mount React components within Jinja templates.
Installation & IntegrationUnderstanding useState, Formik, Context API, and Redux for managing component state.
State ManagementHow to customize existing components using react-overridable and oarepo-ui overrides.
Component OverrideDeep dive into building search apps, deposit forms, and custom components.
Component DevelopmentKey Concepts
Customization
NRP repositories support two customization approaches:
- Client-Side -
react-overridablefor customizing React UI components at runtime - Server-Side -
oarepo-ui overridesgenerates override configuration for react-overridable based on Flask endpoint routing
See Component Override for details.
State Management
Multiple approaches are used depending on complexity:
| Approach | For |
|---|---|
useState | Simple component state |
| Formik | Form handling and validation |
| Context API | Cross-component data sharing |
| Redux | Complex app state (search, forms) |
See State Management for details.