React Skills – DynamoHome
Component rules
Always use functional components:
// ✅
export const MyComponent = ({ title }: MyComponentProps) => <div>{title}</div>;
// ❌ Never
export class MyComponent extends React.Component { ... }
Define explicit prop interfaces:
// ✅
interface GraphGridItemProps {
name: string;
path: string;
onOpen: (path: string) => void;
}
export const GraphGridItem = ({ name, path, onOpen }: GraphGridItemProps) => { ... };
// ❌
export const GraphGridItem = ({ name, path, onOpen }: any) => { ... };
CSS Modules — mandatory:
import styles from './GraphGridItem.module.css';
// Access with bracket notation
<div className={styles['graph-item']}>
// ❌ Never global class names or inline styles
<div className="graph-item">
<div style={{ color: 'red' }}>
State management
- Component-level state:
useState
- Shared user preferences:
useSettings() hook (wraps SettingsContext)
- No external state libraries — Context API only
import { useSettings } from '../SettingsContext';
const { recentPageViewMode, setRecentPageViewMode } = useSettings();
Hooks
- Use built-in hooks:
useState, useEffect, useCallback, useMemo, useRef, useContext
- Consume context via
useSettings() — do not use useContext(SettingsContext) directly
- Use
useIntl() from react-intl when you need a string value (not JSX)
Approved libraries — do not add others
| Library |
Usage |
| react-intl |
<FormattedMessage>, useIntl() |
| react-table |
useTable() hook in GraphTable and SamplesTable |
| react-split-pane |
<SplitPane> in LayoutContainer |
Folder placement
| Component type |
Location |
| Used by one module |
src/components/[Module]/ |
| Used by 2+ modules |
src/components/Common/ |
| App-level |
src/components/ (LayoutContainer, MainContent, SettingsContext) |
What NOT to do
- Do not add Redux, Zustand, Recoil, MobX, Jotai, or any state management library
- Do not add component libraries (Material UI, Ant Design, Chakra, shadcn, etc.)
- Do not use
React.FC type — prefer explicit prop interfaces with arrow function components
- Do not use
React.memo, React.lazy, or Suspense unless explicitly requested
- Do not use
any for prop types, state, or return types in new code
1---2name: react3description: React Skills – DynamoHome4---5# React Skills – DynamoHome67## Component rules89**Always use functional components:**10```tsx11// ✅12export const MyComponent = ({ title }: MyComponentProps) => <div>{title}</div>;1314// ❌ Never15export class MyComponent extends React.Component { ... }16```1718**Define explicit prop interfaces:**19```tsx20// ✅21interface GraphGridItemProps {22 name: string;23 path: string;24 onOpen: (path: string) => void;25}26export const GraphGridItem = ({ name, path, onOpen }: GraphGridItemProps) => { ... };2728// ❌29export const GraphGridItem = ({ name, path, onOpen }: any) => { ... };30```3132**CSS Modules — mandatory:**33```tsx34import styles from './GraphGridItem.module.css';35// Access with bracket notation36<div className={styles['graph-item']}>37// ❌ Never global class names or inline styles38<div className="graph-item">39<div style={{ color: 'red' }}>40```4142## State management4344- Component-level state: `useState`45- Shared user preferences: `useSettings()` hook (wraps `SettingsContext`)46- No external state libraries — Context API only4748```tsx49import { useSettings } from '../SettingsContext';50const { recentPageViewMode, setRecentPageViewMode } = useSettings();51```5253## Hooks5455- Use built-in hooks: `useState`, `useEffect`, `useCallback`, `useMemo`, `useRef`, `useContext`56- Consume context via `useSettings()` — do not use `useContext(SettingsContext)` directly57- Use `useIntl()` from react-intl when you need a string value (not JSX)5859## Approved libraries — do not add others6061| Library | Usage |62|---|---|63| react-intl | `<FormattedMessage>`, `useIntl()` |64| react-table | `useTable()` hook in GraphTable and SamplesTable |65| react-split-pane | `<SplitPane>` in LayoutContainer |6667## Folder placement6869| Component type | Location |70|---|---|71| Used by one module | `src/components/[Module]/` |72| Used by 2+ modules | `src/components/Common/` |73| App-level | `src/components/` (LayoutContainer, MainContent, SettingsContext) |7475## What NOT to do7677- Do not add Redux, Zustand, Recoil, MobX, Jotai, or any state management library78- Do not add component libraries (Material UI, Ant Design, Chakra, shadcn, etc.)79- Do not use `React.FC` type — prefer explicit prop interfaces with arrow function components80- Do not use `React.memo`, `React.lazy`, or `Suspense` unless explicitly requested81- Do not use `any` for prop types, state, or return types in new code