
Intellij IDEA: Шаблоны React-компонентов
28 июля 2025
При создании React-компонентов нужно помнить шаблон компонента или хука. В этом плане Angular выглядит удобнее — там есть CLI, интегрированный с IDE, позволяющий быстро создавать компоненты и сервисы. В случае с React — в разных командах шаблоны могут отличаться, поэтому имеет смысл настроить свои собственные. В этой статье — подборка шаблонов для компонентов, хуков и контекста.

Как создать шаблон в Intellij IDEA
Для создания шаблона, откройте настройки IDEA (Ctrl + Alt + S
), найдите настройки File and Code Templates
, создайте
новые новый шаблон, укажите расширение tsx
.
Шаблон компоненты
import { FC, memo } from 'react';
export interface ${NAME}Props {
}
export const ${NAME}: FC<${NAME}Props> = memo((props) => {
return <div className="ta${NAME}">${NAME} component</div>;
});
${NAME}.displayName = "${NAME}";
Некоторые моменты:
- Не очень люблю дефолтные экспорт т.к. мне кажется она хуже индексируется.
displayName
- для лучшего отображения в девтулзахmemo
- почти всегда в компонента, где есть пропсы стоит использовать мемоизацияta
- класс для поиска в дом дереве, который стоит использовать на корневом элементе- при большом количестве пропсов форматирование выглядит слишком большим, поэтому мне больше нравиться использования
props
вместо деструкции
Расширенные шаблон компоненты
Как вариант могу еще предложить шаблон под разные колбек, стейт и др
import { FC, ReactNode, memo, useState, useCallback } from 'react';
export interface ${NAME}Props {
children?: ReactNode;
}
export const ${NAME}: FC<${NAME}Props> = memo(({ x, children }) => {
const [state, setState] = useState(false);
const handleToggle = useCallback(() => {
setState(prev => !prev);
}, []);
return (
<div className="ta${NAME}">
<button onClick={handleToggle}>
Toggle: {state ? 'ON' : 'OFF'}
</button>
<div>{children}</div>
</div>
);
});
${NAME}.displayName = "${NAME}";
Шаблон hook'a
import { useCallback } from 'react';
export interface Use${NAME}Props {
}
export interface Use${NAME}Return {
value: string | undefined;
}
export const use${NAME} = (props: Use${NAME}Props): Use${NAME}Return => {
const value = useMemo(() => {
return undefined;
}, []);
return {
value
};
}
Использование в компоненте:
export const MyComponent = memo(({ user }) => {
const value = use${NAME}();
return <div>{value}</div>;
});
Шаблон сontext'a
import { FC, createContext, useContext, useState, ReactNode } from 'react';
interface ${NAME}ContextProps {
value: boolean;
setValue: (v: boolean) => void;
}
const ${NAME}Context = createContext<${NAME}ContextProps | undefined>(undefined);
interface ${NAME}ProviderProps {
defaultValue: boolean;
children: ReactNode
}
export const ${NAME}Provider: FC<${NAME}ProviderProps> = ({ defaultValue, children }) => {
const [value, setValue] = useState(defaultValue);
return (
<${NAME}Context.Provider value={{ value, setValue }}>
{children}
</${NAME}Context.Provider>
);
};
export const use${NAME} = () => {
const context = useContext(${NAME}Context);
if (!context) throw new Error('use${NAME} must be used within ${NAME}Provider');
return context;
};
Использование в компоненте:
export default function App() {
return (
<${NAME}Provider defaultValue={false}>
<MyComponent />
</${NAME}Provider>
);
}
import { FC, memo } from 'react';
export const ${NAME}: FC = memo(() => {
const { value, setValue } = useAppContext();
return <div>{value}</div>;
});