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. Actualmente
Los Hooks son una nueva propuesta de funciones que te permite usar el estado y otras funciones de React sin escribir una clase. Se lanzan en React como parte de v16.8.0
useEffect
El gancho se puede usar para replicar el comportamiento del ciclo de vida y useState
se puede usar para almacenar el estado en un componente de función.
Sintaxis básica:
useEffect(callbackFunction, [dependentProps]) => cleanupFunction
Puede implementar su caso de uso en ganchos como
const grid = (props) => {
console.log(props);
let {skuRules} = props;
useEffect(() => {
if(!props.fetched) {
props.fetchRules();
}
console.log('mount it!');
}, []); // passing an empty array as second argument triggers the callback in useEffect only after the initial render thus replicating `componentDidMount` lifecycle behaviour
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>
)
}
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 de componentWillUnmount
:
Por ejemplo: componentWillUnmount
useEffect(() => {
window.addEventListener('unhandledRejection', handler);
return () => {
window.removeEventListener('unhandledRejection', handler);
}
}, [])
Para useEffect
condicionar eventos específicos, puede proporcionarle una matriz de valores para verificar cambios:
Por ejemplo: componentDidUpdate
componentDidUpdate(prevProps, prevState) {
const { counter } = this.props;
if (this.props.counter !== prevState.counter) {
// some action here
}
}
Equivalente de ganchos
useEffect(() => {
// action here
}, [props.counter]); // checks for changes in the values in this array
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 API Here
.
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 la React.Component
clase si desea utilizar la función de ciclo de vida.
class Grid extends React.Component {
constructor(props) {
super(props)
}
componentDidMount () {
if(!this.props.fetched) {
this.props.fetchRules();
}
console.log('mount it!');
}
render() {
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>
)
}
}
Los componentes de función son útiles cuando solo desea renderizar su componente sin la necesidad de lógica adicional.