Компоненты и стили
Пример функционального компонента
import { FC, useState, PropsWithChildren } from 'react';
import styles from './SomeComponent.module.scss';
type TProps = {
title: string;
action: () => void;
children: React.ReactNode;
};
// функция, возвращающая JSX
// function Main(): JSX.Element {
// запись через функцию
// function SomeComponent({ title, action }: TProps) {
// типизация через типизацию объекта пропсов
// const SomeComponent = ({ title, action }: TProps) => {
// типизация с children
// const SomeComponent: React.FC<PropsWithChildren<TProps>> = ...
// типизация через дженерик реакт функ. компонента
const SomeComponent: FC<TProps> = ({ title, action }) => {
// вызов хука useState
const [count, setCount] = useState<number>(0);
const someLocalAction = () => {
console.log('Do something');
};
return (
<div className={styles.SomeComponent}>
<h2>{title}</h2>
<span>{count}</span>
<button onClick={() => setCount(count + 1)}>+1</button>
<button onClick={() => action()}>Click me</button>
<button onClick={someLocalAction}>Click me</button>
</div>
);
};
export default SomeComponent;
Props
В props можно передавать любой тип данных и другие компоненты.
// nипизация пропсов
type TProps = {
prop1: number;
prop2: string;
prop3: boolean;
prop4: TSomeObj;
prop5: TSomeObj[];
prop6: (val: TSomeObj) => void;
prop7?: ReactElement<any, any>; // реакт-компонент как property
}
...
<SomeComponent
prop1={10}
prop2="Some string"
prop3={true}
prop4={{ name: 'John Smith', age: 35 }}
prop5={[{ name: 'John Smith1', age: 35 }, { name: 'John Smith2', age: 35 }, { name: 'John Smith3', age: 35 }]}
prop6={setState}
prop7={
<div>
<p>Some Layout</p>
</div>
}
>
Передача параметров в prop-action
type TProps = {
isMapPage?: boolean;
updateCommentAction?: (value: string) => void;
};
...
// использование prop-action
const updateComment = () => {
updateCommentAction && updateCommentAction(value);
}
...
// передача параметра
<EditDrugstoreCommentModal
isMapPage={false}
updateCommentAction={(val: string) => console.log(val)}
// или так
updateCommentAction={updateComment}
/>
const updateComment = (value: string) => {
console.log(value);
};