Tienes la idea correcta. Vaya con funcional si su componente no hace mucho más que tomar algunos accesorios y renderizar. Puede pensar en estas como funciones puras porque siempre se renderizarán y se comportarán de la misma manera, dados los mismos accesorios. Además, no les importan los métodos del ciclo de vida o tienen su propio estado interno.
Debido a que son livianos, escribir estos componentes simples como componentes funcionales es bastante estándar.
Si sus componentes necesitan más funcionalidad, como mantener el estado, use clases en su lugar.
Más información: https://facebook.github.io/react/docs/reusable-components.html#es6-classes
EDITAR : Gran parte de lo anterior era cierto, hasta la introducción de React Hooks.
componentDidUpdate
se puede replicar con useEffect(fn)
, donde fn
es la función que se ejecuta al volver a procesar.
componentDidMount
Los métodos se pueden replicar con useEffect(fn, [])
, donde fn
es la función que se ejecutará al volver a renderizar, y []
es una matriz de objetos para los cuales se volverá a procesar el componente, si y solo si al menos uno ha cambiado de valor desde el renderizado anterior. Como no hay ninguno, se useEffect()
ejecuta una vez, en el primer montaje.
state
se puede replicar con useState()
, cuyo valor de retorno se puede desestructurar a una referencia del estado y una función que puede establecer el estado (es decir, const [state, setState] = useState(initState)
). Un ejemplo podría explicar esto más claramente:
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
Con respecto a la recomendación sobre cuándo usar la clase sobre los componentes funcionales, Facebook recomienda oficialmente usar componentes funcionales siempre que sea posible . Como un pequeño aparte, he escuchado a varias personas debatir sobre no usar componentes funcionales por razones de rendimiento, específicamente que
"Las funciones de manejo de eventos se redefinen por render en componentes funcionales"
Si bien es cierto, tenga en cuenta si sus componentes realmente se están procesando a una velocidad o volumen tales que esto valdría la pena preocuparse.
Si lo son, puede evitar la redefinición de las funciones con useCallback
y useMemo
ganchos. Sin embargo, tenga en cuenta que esto puede empeorar el rendimiento de su código (microscópicamente) .
Pero, sinceramente, nunca he oído hablar de redefinir las funciones como un cuello de botella en las aplicaciones React. Las optimizaciones prematuras son la raíz de todo mal; preocúpese por esto cuando sea un problema