Komponent, który zwraca tylko wartość

Komponent, który zwraca tylko wartość
M7
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 40
1

Czy dobrą praktyką jest stosowanie komponentu w React w którym tylko jest zwracana wartość ? Chodzi o to aby w komponencie była logika, która coś wylicza i później zwraca tylko wartość. Coś podobnego jak poniżej:

Kopiuj
import React from 'react';

const DisplayTime = (timeToFormat) => {
  const time = // some calculation;

  return time;
};

export default DisplayTime;

const BuildingTime = () => {
  // jakis state i logika  


  return <DisplayTime timeToFormat={timeToFormatOrSomethingElse}></DisplayTime>;
}

export default BuildingTime

Jak później taki komponent jak DisplayTime przetestować w unit testach skoro nie ma żadnych elementów HTML w sobie ? Czy do takiego komponentu nie pisze się testów ? Czy po prostu testuje się jak funkcję ?

PH
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 374
0

od tego są custom hooks

M7
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 40
0

Czyli złą praktyką jest dodawanie takiego komponentu ? Powinien być on custom hookiem ?

SW
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 250
2

Przecież DisplayTime to nawet nie jest komponent reactowy tylko funkcja. Skoro coś jest funkcją, to po co mieszać w to Reacta? Testujesz funkcję oddzielnie.

Kopiuj
import React from 'react';

const displayTime = (timeToFormat) => {
 const time = // some calculation;

 return time;
};

export default DisplayTime;

const BuildingTime = () => {
 // jakis state i logika  


  return <p>{displayTime(new Date())}</p>;
}

export default BuildingTime

Na upartego możesz zwracać ReactNode, ale wtedy nie masz już wprost dostępu do wyniku DisplayTime.

Kopiuj
import React from 'react';

const DisplayTime = (timeToFormat) => {
 const time = // some calculation;

 return <>{time}</>;
};

export default DisplayTime; 

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.