Esta discusión ha sido durante un tiempo y la respuesta de @Alexander T. proporcionó una buena guía a seguir para los nuevos de React como yo. Y voy a compartir algunos conocimientos adicionales sobre cómo llamar a la misma API varias veces para actualizar el componente, creo que probablemente sea un problema común que los novatos pueden enfrentar al principio.
componentWillReceiveProps(nextProps)
, de la documentación oficial :
Si necesita actualizar el estado en respuesta a los cambios de prop (por ejemplo, para restablecerlo), puede comparar this.props y nextProps y realizar transiciones de estado usando this.setState () en este método.
Podríamos concluir que aquí es donde manejamos los accesorios del componente principal, tenemos llamadas de API y actualizamos el estado.
Base en el ejemplo de @Alexander T.:
export default class UserList extends React.Component {
constructor(props) {
super(props);
this.state = {person: []};
}
componentDidMount() {
//For our first load.
this.UserList(this.props.group); //maybe something like "groupOne"
}
componentWillReceiveProps(nextProps) {
// Assuming parameter comes from url.
// let group = window.location.toString().split("/")[*indexParameterLocated*];
// this.UserList(group);
// Assuming parameter comes from props that from parent component.
let group = nextProps.group; // Maybe something like "groupTwo"
this.UserList(group);
}
UserList(group) {
$.getJSON('https://randomuser.me/api/' + group)
.then(({ results }) => this.setState({ person: results }));
}
render() {
return (...)
}
}
Actualizar
componentWillReceiveProps()
Sería obsoleto.
Aquí hay solo algunos métodos (todos en Doc ) en el ciclo de vida que creo que estarían relacionados con la implementación de API en general:
Al referirse al diagrama anterior:
Implementar API en componentDidMount()
El escenario adecuado para tener una llamada a la API aquí es que el contenido (de la respuesta de la API) de este componente será estático, componentDidMount()
solo se disparará una vez mientras el componente se está montando, incluso se pasan nuevos accesorios del componente principal o tienen acciones para liderar re-rendering
.
El componente verifica la diferencia para volver a renderizar pero no para volver a montar .
Cita del doc :
Si necesita cargar datos desde un punto final remoto, este es un buen lugar para instanciar la solicitud de red.
- Implementar API en
static getDerivedStateFromProps(nextProps, prevState)
Debemos notar que hay dos tipos de actualización de componentes , setState()
en la componente de corriente que no conduzcan a este método gatillo, pero re-representación o nuevos apoyos de componente de los padres hacemos. Podríamos descubrir que este método también se activa durante el montaje.
Este es un lugar adecuado para implementar API si queremos usar el componente actual como una plantilla, y los nuevos parámetros para API son accesorios que provienen del componente principal .
Recibimos una respuesta diferente de API y devolvemos una nueva state
aquí para cambiar el contenido de este componente.
Por ejemplo:
tenemos una lista desplegable para diferentes automóviles en el componente principal, este componente debe mostrar los detalles del seleccionado.
- Implementar API en
componentDidUpdate(prevProps, prevState)
A diferencia de static getDerivedStateFromProps()
, este método se invoca inmediatamente después de cada representación, excepto la representación inicial. Podríamos tener llamadas de API y representar la diferencia en un componente.
Extienda el ejemplo anterior:
el componente para mostrar los detalles del automóvil puede contener una lista de series de este automóvil, si queremos verificar el de producción de 2013, podemos hacer clic o seleccionar o ... el elemento de la lista para liderar un primero setState()
para reflejar esto comportamiento (como resaltar el elemento de la lista) en este componente y, a continuación componentDidUpdate()
, enviamos nuestra solicitud con nuevos parámetros (estado). Después de obtener la respuesta, setState()
nuevamente para mostrar el contenido diferente de los detalles del automóvil. Para evitar que lo siguiente componentDidUpdate()
provoque el bucle infinito, necesitamos comparar el estado utilizando prevState
al principio de este método para decidir si enviamos la API y representamos el nuevo contenido.
Este método realmente podría utilizarse al igual que static getDerivedStateFromProps()
con los accesorios, pero necesita manejar los cambios props
mediante la utilización prevProps
. Y tenemos que cooperar componentDidMount()
para manejar la llamada API inicial.
Cita del doc :
... Este también es un buen lugar para hacer solicitudes de red siempre que compare los accesorios actuales con los accesorios anteriores ...
componentDidMount
devolución de llamada.