El título lo dice todo. Entiendo por qué componentDidMount
es 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é componentDidMount
es apropiado para cualquier cosa que requiera acceso DOM, pero una solicitud AJAX no necesariamente o normalmente lo necesita.
¿Lo que da?
Respuestas:
componentDidMount
es para efectos secundarios. Agregar oyentes de eventos, AJAX, mutar el DOM, etc.
componentWillMount
rara 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 componentWillMount
componentes de la clase, ya que tiene el mismo propósito que el constructor. Permanecerá en los createClass
componentes.
componentWillMount
? Realmente no veo la distinción.
componentWillMount
se 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 componentWillMount
que 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, componentWillMount
pero 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 componentDidMount
para sus llamadas ajax.
setState
a 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 componentWillMount
no activará una nueva renderización. Si la llamada AJAX no se está bloqueando y devuelve un mensaje Promise
que 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 componentWillMount
no 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.
componentWillMount
no activa una re-renderización solo porque se define un nuevo estado antes de la primera renderización. Pero si setState
se llama en una devolución de llamada AJAX, definitivamente se llamará después del primer renderizado y activará un nuevo renderizado.
componentWillMount
fallaría dado que el componente ... no se montó.