Estoy usando Next.js para mi aplicación React porque tiene representación del lado del servidor. Como verifiqué por registro, ambos métodos, ComponentWillMount y getInitialProps , se ejecutan en el lado del servidor. ¿Hay alguna diferencia entre esos métodos?
¿Cuándo debo ejecutar ComponentWillMount y cuándo debo ejecutar getInitialProps ?
No veo menciones de Next.js sobre esto.
ADVERTENCIA
El 50% de la respuesta aceptada es incorrecta. Este es el por qué. Permítanme dividir mi respuesta en dos secciones:
Parte 1:
GetInitialProps suele ser una función asíncrona que es buena para operaciones asíncronas en el servidor y pasa datos a la página como accesorios.
En Next.js siempre se ejecuta en el servidor, si se llama a la página usando Link, solo se llama en el lado del cliente
Incorrecto , GetInitialProps se ejecuta tanto en el servidor como en el navegador (recuerde que el objetivo de Next.js es hacer JavaScript universal). Esto es lo que dice la documentación:
Parte 2:
La segunda sección es para responder a la pregunta real con mayor precisión. Está claro que el OP se confundió entre ComponentDidMount y ComponentWillMount . Porque en el caso de Next.js tiene más sentido comparar GetInitialProps con ComponentDidMount, ya que ambos pueden realizar una llamada Async para obtener datos y también permiten la representación posterior (lo que no es posible en el caso de ComponentWillMount ).
En cualquier caso uses uno u otro, hay algunas diferencias:
GetInitialProps : lo proporciona Next.js y no siempre se activa, así que tenga cuidado con eso. Sucede cuando envuelves un componente dentro de otro. Si el componente principal tiene GetInitialProps, nunca se activará GetInitialProps del elemento secundario. Vea este hilo para más información.
ComponentDidMount : es la implementación de React y siempre se activa en el navegador.
Podría preguntar: 'entonces, ¿cuándo debo usar esto o aquello?'. En realidad es muy confuso y al mismo tiempo muy simple. Aquí hay una regla general:
ObtenerAccesoriosIniciales
GetInitialProps es una función generalmente asíncrona que es buena para operaciones asíncronas en el servidor y pasa datos a la página como accesorios.
En Next.js siempre se ejecuta en el servidor, si se llama a la página mediante Link, solo se llama en el lado del cliente.
Solo se puede usar en páginas, no en componentes.
ComponenteMontará
Es un gancho de ciclo de vida. Se llama justo antes de llamar al método render. Los datos obtenidos en él no se pueden pasar como accesorios.
Se puede llamar tanto en un componente como en páginas. No es un buen lugar para realizar llamadas asíncronas, ya que no espera a que se complete la operación asíncrona. Entonces, si se ejecuta en el servidor y su operación asíncrona está escrita en él, no se completará y llegará al cliente sin obtener datos.
componentWillMount son los métodos del ciclo de vida del componente .
Según la documentación
componentWillMount() se invoca inmediatamente antes de que se produzca el montaje. Se llama antes de render() , por lo tanto, llamar a setState() sincrónicamente en este método no activará una representación adicional. En general, recomendamos usar el constructor() en su lugar. Evite introducir efectos secundarios o suscripciones en este método. Para esos casos de uso, use componentDidMount() en su lugar. Este es el único enlace de ciclo de vida llamado en la representación del servidor.