Props drilling
Per komponentą ir hook praeina daugybė props, kurie nereikalingi pačiam komponentui
const App = () => {
const {
selectedMonth,
setSelectedMonth,
selectedYear,
setSelectedYear,
hideWeekends,
setHideWeekends,
tableContainerRef,
currentDayRef,
getVisibleDays,
getWeekday, months,
} = useCalendar();
const {
getUniqueTasks, getDayTotal, getDayTracks,
getMonthTotal,
getTaskTotal,
handleDeleteTrack,
submitTrack
} = useTracks (selectedMonth, selectedYear);
Ir paskui jie perduodami kitam komponentui.
[] > name > [] > name > [ name ]
Minusai
- Kodas suprantamesnis
- Daug šabloninio kodo (import, props)
- Vis dar sunku suprasti kodą
- Suprasti kaip viskas veikia tapo dar sunkiau
Dekomponentizacija sąlogija daug meta informacijos/duomenų, aprašant interfeisus
interface TableProps {
tableContainerRef: React.RefObject<HTMLDivElement>;
currentDayRef: React. RefObject<HTMLTableCellElement>; getVisibleDays: () => number[];
getWeekday: (day: number) => string;
selectedMonth: number;
selectedYear: number;
getUniqueTasks: () => string[];
getDayTracks: (day: number, task: string) => Track []; handleCellClick: (day: number, task; string) => void; handleUpdate Track: (track: Track) => void; handleDeleteTrack: (trackId: string) => void;
getTaskTotal: (task: string) => number;
getDayTotal: (day: number) => number;
getMonthTotal: () => number;
Komponentu nePERpanaudojimas. Komponento nepanaudosi be vidiniu komponentų.
<div className={styles.tableContainer) ref={tablec...} >
<table className={styles.table}>
<TableHead
getVisibleDays={getVisibleDays} getWeekday={getWeekday}
currentDayRef={currentDayRef}
selectedMonth={selectedMonth}
selectedYear={selectedYear}
/>
<tbody>
{getUniqueTasks().map(task => (
<TableRow
key={task} task={task}
getVisibleDays={getVisibleDays} getDayTracks={getDayTracks}
handleCellClick={handleCellClick}
handleUpdateTrack={handleUpdateTrack} handleDeleteTrack={handleDelete Track}
getTaskTotal={getTaskTotal}
/>
))}
<TableSummaryRow
Sprendimas
- Redux panaudojimas. Tiesiai pasiimti gali iš redus nereikia perdavineti
- naudoti pattern
slotirmediator