Espero que el estado se recargue en el cambio de accesorios, pero esto no funciona y la user
variable no se actualiza en la próxima useState
llamada, ¿qué está mal?
function Avatar(props) {
const [user, setUser] = React.useState({...props.user});
return user.avatar ?
(<img src={user.avatar}/>)
: (<p>Loading...</p>);
}
reactjs
react-hooks
vitalyster
fuente
fuente
React.useEffect
para establecer el estado inicial en cada momento.Componentes funcionales donde usamos
useState
para establecer valores iniciales para nuestra variable, si pasamos el valor inicial a través de accesorios, siempre establecerá el mismo valor inicial hasta que no haga uso deluseEffect
gancho,por ejemplo su caso esto hará su trabajo
React.useEffect(() => { setUser(props.user); }, [props.user])
La función pasada a useEffect se ejecutará después de que el renderizado se confirme en la pantalla.
De forma predeterminada, los efectos se ejecutan después de cada renderizado completo, pero puede optar por activarlos solo cuando ciertos valores hayan cambiado.
si pasa solo un argumento a useEffect, ejecutará este método después de cada renderizado, puede decidir cuándo activar esto
FunctionYouWantToRunAfterEveryRender
pasando el segundo argumento a useEffectcomo notará, estoy pasando [props.user] ahora
useEffect
solo activará estaFunctionYouWantToRunAfterEveryRender
función cuandoprops.user
se cambieEspero que esto ayude a su comprensión, avíseme si se requieren mejoras gracias
fuente
El parámetro pasado
React.useState()
es solo el valor inicial para ese estado. React no reconocerá eso como un cambio de estado, solo configurando su valor predeterminado. Querrá establecer el estado predeterminado inicialmente y luego llamar condicionalmentesetUser(newValue)
, que se reconocerá como un nuevo estado, y volver a renderizar el componente.Recomendaría tener cuidado al actualizar el estado sin algún tipo de condición para evitar que se actualice constantemente y, por lo tanto, vuelva a renderizar cada vez que se reciban los accesorios. Es posible que desee considerar elevar la funcionalidad de estado a un componente principal y pasar el estado del padre a este Avatar como accesorio.
fuente
Según la documentación de ReactJS sobre Hooks :
Su única interacción aquí debería ocurrir en un cambio de accesorios, que parece no funcionar. Podría (aún de acuerdo con el documento) usar un componentDidUpdate (prevProps) para detectar de manera proactiva cualquier actualización de los accesorios.
PD: No tengo suficiente código para juzgar, pero ¿no podrías establecer activamente Usuario () dentro de tu función Avatar (accesorios)?
fuente
En el mundo de reacción, debe actualizar su estado en la función componentWillRecieveProps (nextProps), en tales casos.
fuente