En lugar de escribir mis componentes dentro de una clase, me gustaría usar la sintaxis de la función.
¿Cómo puedo reemplazar componentDidMount
, componentWillMount
dentro de los componentes de la función?
¿Es siquiera posible?
const grid = (props) => {
console.log(props);
let {skuRules} = props;
const componentDidMount = () => {
if(!props.fetched) {
props.fetchRules();
}
console.log('mount it!');
};
return(
<Content title="Promotions" breadcrumbs={breadcrumbs} fetched={skuRules.fetched}>
<Box title="Sku Promotion">
<ActionButtons buttons={actionButtons} />
<SkuRuleGrid
data={skuRules.payload}
fetch={props.fetchSkuRules}
/>
</Box>
</Content>
)
}
Respuestas:
Editar: Con la introducción de
Hooks
es posible implementar un tipo de comportamiento del ciclo de vida, así como el estado en los Componentes funcionales. ActualmenteuseEffect
El gancho se puede usar para replicar el comportamiento del ciclo de vida yuseState
se puede usar para almacenar el estado en un componente de función.Sintaxis básica:
Puede implementar su caso de uso en ganchos como
useEffect
también puede devolver una función que se ejecutará cuando se desmonte el componente. Esto se puede usar para cancelar la suscripción a los oyentes, replicando el comportamiento decomponentWillUnmount
:Por ejemplo: componentWillUnmount
Para
useEffect
condicionar eventos específicos, puede proporcionarle una matriz de valores para verificar cambios:Por ejemplo: componentDidUpdate
Equivalente de ganchos
Si incluye esta matriz, asegúrese de incluir todos los valores del alcance del componente que cambian con el tiempo (accesorios, estado), o puede terminar haciendo referencia a valores de representaciones anteriores.
Hay algunas sutilezas en el uso
useEffect
; echa un vistazo a la APIHere
.Antes de v16.7.0
La propiedad de los componentes de función es que no tienen acceso a las funciones del ciclo de vida de Reacts ni a la
this
palabra clave. Necesita extender laReact.Component
clase si desea utilizar la función de ciclo de vida.Los componentes de función son útiles cuando solo desea renderizar su componente sin la necesidad de lógica adicional.
fuente
useEffect(() => { // action here }, [props.counter])
se activa en el procesamiento inicial, mientras que componentDidUpdate no lo hace.passing an empty array as second argument triggers the callback in useEffect only after the initial render
esto suena como una forma sucia y hacky de construir cosas: / con suerte, el equipo de reacción encontrará algo mejor en futuras versiones.Puede usar react-pure-lifecycle para agregar funciones de ciclo de vida a componentes funcionales.
Ejemplo:
fuente
Grid
? ¿No lo veo definido en ninguna parte de su fragmento de código? Si quisieras usar redux con esto también, ¿podrías salirte con la tuya con algo comoexport default lifecycle(methods)(connect({},{})(ComponentName))
?Solución 1: puede utilizar la nueva API react HOOKS . Actualmente en React v16.8.0
Los Hooks te permiten usar más funciones de React sin clases. Los Hooks proporcionan una API más directa a los conceptos de React que ya conoce: props, state, context, refs y lifecycle . Hooks resuelve todos los problemas que se abordan con Recompose.
Una nota del autor de
recompose
(acdlite, 25 de octubre de 2018):Solución dos:
Si está utilizando la versión de
recompose
React que no admite hooks, no se preocupe, use (A React utility belt para componentes de función y componentes de orden superior) en su lugar. Puede utilizarrecompose
para adjuntarlifecycle hooks, state, handlers etc
a un componente de función.Aquí hay un componente sin renderizado que adjunta métodos de ciclo de vida a través del ciclo de vida HOC (de recomposición).
fuente
Puede crear sus propios métodos de ciclo de vida.
Funciones de utilidad
Uso
fuente
Según la documentación:
ver la documentación de React
fuente
Si necesita usar React LifeCycle, necesita usar Class.
Muestra:
fuente
Puede hacer uso del módulo create-react-class. Documentación oficial
Por supuesto que primero debes instalarlo
Aquí hay un ejemplo de trabajo
fuente
si usa react 16.8, puede usar react Hooks ... React Hooks son funciones que le permiten "conectarse" al estado de React y las características del ciclo de vida de los componentes de funciones ... docs
fuente