Ви маєте правильну ідею. Займіться функціоналом, якщо ваш компонент не набагато більше, ніж зайняти деякі реквізити та візуалізувати. Ви можете думати про це як про чисті функції, оскільки вони завжди будуть відображатись та поводяться однаково, враховуючи однакові реквізити. Крім того, вони не переймаються методами життєвого циклу або мають власний внутрішній стан.
Оскільки вони легкі, писати ці прості компоненти як функціональні компоненти досить стандартно.
Якщо ваші компоненти потребують більшої функціональності, як-от утримання стану, замість цього використовуйте класи.
Більше інформації: https://facebook.github.io/react/docs/reusable-components.html#es6-classes
EDIT : Багато з сказаного було правдою, аж до введення React Hooks.
componentDidUpdate
може бути реплікувати з useEffect(fn)
, де fn
функція, яку потрібно запустити при повторній передачі.
componentDidMount
Методи можуть бути тиражовані useEffect(fn, [])
, де fn
функція, яку потрібно запустити при повторному рендерингу, і []
являє собою масив об'єктів, для яких компонент буде рендерувати, якщо і тільки якщо принаймні один змінено значення з попереднього візуалізації. Оскільки їх немає, useEffect()
запускається один раз на першому монтажі.
state
можна реплікувати з useState()
, повернене значення якого може бути зруйновано на посилання на стан і функцію, яка може встановити стан (тобто const [state, setState] = useState(initState)
). Приклад може пояснити це більш чітко:
const Counter = () => {
const [count, setCount] = useState(0)
const increment = () => {
setCount(count + 1);
}
return (
<div>
<p>Count: {count}</p>
<button onClick={increment}>+</button>
</div>
)
}
default export Counter
Щодо рекомендації щодо використання класу над функціональними компонентами, Facebook офіційно рекомендує використовувати функціональні компоненти, де це можливо . Як невеличкий бік, я чув, як ряд людей обговорювали не використання функціональних компонентів з міркувань продуктивності, зокрема
"Функції обробки подій переосмислюються за візуалізацією у функціональних компонентах"
Незважаючи на це правда, будь ласка, врахуйте, чи справді ваші компоненти відображаються з такою швидкістю чи обсягом, що це варто занепокоїти.
Якщо вони є, ви можете запобігти перевизначення функції , використовуючи useCallback
і useMemo
гачки. Однак майте на увазі, що це може покращити ваш код (мікроскопічно) в роботі .
Але, чесно кажучи, я ніколи не чув, щоб переосмислити функції як вузьке місце в програмах React. Передчасні оптимізації - корінь усього зла - переживайте про це, коли це проблеми