Lo primero que hay que tener en cuenta es que los componentes funcionales sin estado no pueden tener métodos, no debe contar con llamar update
o draw
renderizar Ball
si es un componente funcional sin estado.
En la mayoría de los casos, debe declarar las funciones fuera de la función del componente para que las declare solo una vez y siempre reutilice la misma referencia. Cuando declaras la función en el interior, cada vez que se renderiza el componente, la función se volverá a definir.
Hay casos en los que necesitará definir una función dentro del componente para, por ejemplo, asignarla como un controlador de eventos que se comporta de manera diferente según las propiedades del componente. Pero aún así, podría definir la función fuera Ball
y vincularla con las propiedades, haciendo que el código sea mucho más limpio y haciendo que las funciones update
o sean draw
reutilizables.
const update (propX, a, b) => { ... };
const Ball = props => (
<Something onClick={update.bind(null, props.x)} />
);
Si está usando ganchos , puede usar useCallback
para asegurarse de que la función solo se redefina cuando una de sus dependencias ( props.x
en este caso) cambia:
const Ball = props => {
const onClick = useCallback((a, b) => {
}, [props.x]);
return (
<Something onClick={onClick} />
);
}
Esta es la forma incorrecta :
const Ball = props => {
function update(a, b) {
}
return (
<Something onClick={update} />
);
}
A la hora de usar useCallback
, definir la update
función en el useCallback
propio hook fuera del componente se convierte en una decisión de diseño más que nada, debes tener en cuenta si vas a reutilizar update
y / o si necesitas acceder al alcance del cierre del componente para, por ejemplo, leer / escribir en el estado. Personalmente, elijo definirlo dentro del componente de forma predeterminada y hacerlo reutilizable solo si surge la necesidad, para evitar la ingeniería excesiva desde el principio. Además de eso, es mejor reutilizar la lógica de la aplicación con ganchos más específicos, dejando los componentes para fines de presentación. Definir la función fuera del componente mientras se usan ganchos realmente depende del grado de desacoplamiento de React que desee para la lógica de su aplicación.