El título lo dice todo. Entiendo por qué componentDidMountes apropiado para cualquier cosa que requiera acceso DOM, pero una solicitud AJAX no necesariamente o normalmente lo necesita.
¿Lo que da?
El título lo dice todo. Entiendo por qué componentDidMountes apropiado para cualquier cosa que requiera acceso DOM, pero una solicitud AJAX no necesariamente o normalmente lo necesita.
¿Lo que da?
Respuestas:
componentDidMountes para efectos secundarios. Agregar oyentes de eventos, AJAX, mutar el DOM, etc.
componentWillMountrara vez es útil; especialmente si le importa la representación del lado del servidor (agregar detectores de eventos causa errores y fugas, y muchas otras cosas que pueden salir mal).
Se habla de eliminar componentWillMountcomponentes de la clase, ya que tiene el mismo propósito que el constructor. Permanecerá en los createClasscomponentes.
componentWillMount? Realmente no veo la distinción.
componentWillMountse ejecutará en un render del lado del servidor. Mientras que si estuviera usando componentDidMount, eso solo se ejecutaría en el lado del cliente. Como resultado, poner cosas componentWillMountque realicen interacciones externas o se unan a eventos, etc., no es una gran idea. Si no tiene planes de renderizar sus componentes en el lado del servidor, todavía no es una buena idea solo para la posible portabilidad del código. Todo esto está fuera de la razón principal por la que es malo, que se explica en la respuesta de @daniula.
Yo también tuve el mismo problema al principio. Decidí intentar hacer solicitudes, componentWillMountpero terminé en varios pequeños problemas.
Estaba activando el renderizado cuando la llamada ajax finaliza con nuevos datos. En algún momento, la renderización del componente tomó más tiempo que la respuesta del servidor y en este punto la devolución de llamada de ajax estaba activando la renderización en el componente desmontado. Este es un caso de borde, pero probablemente hay más, por lo que es más seguro seguir componentDidMount.
componentWillMount, por lo que aún debe seguir usándolo componentDidMountpara sus llamadas ajax.
setStatea un constructor de componentes y no tiene forma de determinar cuándo se completará la llamada AJAX. twitter.com/dan_abramov/status/576453138598723585
De acuerdo con la configuración de la documentación, el estado componentWillMountno activará una nueva renderización. Si la llamada AJAX no se está bloqueando y devuelve un mensaje Promiseque actualiza el estado del componente en caso de éxito, hay posibilidades de que la respuesta llegue una vez que se haya procesado el componente. Como componentWillMountno desencadena una repetición, no tendrá el comportamiento que esperaba, que es el componente que se representa con los datos solicitados.
Si usa cualquiera de las bibliotecas de flujo y los datos solicitados terminan en la tienda a la que está conectado el componente (o heredan de un componente conectado), esto no será un problema, ya que la recepción de esos datos, muy probablemente, cambiará los accesorios. finalmente.
componentWillMountno activa una re-renderización solo porque se define un nuevo estado antes de la primera renderización. Pero si setStatese llama en una devolución de llamada AJAX, definitivamente se llamará después del primer renderizado y activará un nuevo renderizado.
componentWillMountfallaría dado que el componente ... no se montó.