Em vez de escrever meus componentes dentro de uma classe, gostaria de usar a sintaxe da função.
Como faço para substituir componentDidMount
, componentWillMount
dentro dos componentes da função?
É mesmo possível?
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>
)
}
Respostas:
Edit: Com a introdução do
Hooks
, é possível implementar um tipo de comportamento de ciclo de vida, bem como o estado nos componentes funcionais. AtualmenteuseEffect
O gancho pode ser usado para replicar o comportamento do ciclo de vida euseState
pode ser usado para armazenar o estado em um componente de função.Sintaxe básica:
Você pode implementar seu caso de uso em ganchos como
useEffect
também pode retornar uma função que será executada quando o componente for desmontado. Isso pode ser usado para cancelar a assinatura de ouvintes, replicando o comportamento decomponentWillUnmount
:Ex .: componentWillUnmount
Para tornar
useEffect
condicional a eventos específicos, você pode fornecer uma matriz de valores para verificar as alterações:Ex: componentDidUpdate
Equivalente a ganchos
Se você incluir esta matriz, certifique-se de incluir todos os valores do escopo do componente que mudam com o tempo (props, estado), ou você pode acabar fazendo referência a valores de renderizações anteriores.
Existem algumas sutilezas para usar
useEffect
; verifique a APIHere
.Antes da v16.7.0
A propriedade dos componentes de função é que eles não têm acesso às funções do ciclo de vida do Reacts ou à
this
palavra - chave. Você precisa estender aReact.Component
classe se quiser usar a função de ciclo de vida.Os componentes de função são úteis quando você deseja apenas renderizar seu componente sem a necessidade de lógica extra.
fonte
useEffect(() => { // action here }, [props.counter])
é disparado na renderização inicial, enquanto o componentDidUpdate não.passing an empty array as second argument triggers the callback in useEffect only after the initial render
isso soa como uma maneira hacky suja de construir coisas: / espero que a equipe react venha com algo melhor em lançamentos futuros.Você pode usar o react-pure-lifecycle para adicionar funções de ciclo de vida a componentes funcionais.
Exemplo:
fonte
Grid
? Não o vejo definido em nenhum lugar do seu snippet de código? Se você também quisesse usar redux com isso, poderia usar algo comoexport default lifecycle(methods)(connect({},{})(ComponentName))
?Solução um: você pode usar a nova API react HOOKS . Atualmente no React v16.8.0
Os ganchos permitem que você use mais recursos do React sem classes. Os ganchos fornecem uma API mais direta para os conceitos do React que você já conhece: props, state, context, refs e lifecycle . Hooks resolve todos os problemas tratados com Recompose.
Uma nota do autor de
recompose
(acdlite, 25 de outubro de 2018):Solução dois:
Se você estiver usando a versão do react que não suporta ganchos, não se preocupe, use
recompose
(Um cinto de utilidades do React para componentes de função e componentes de ordem superior). Você pode usarrecompose
para anexarlifecycle hooks, state, handlers etc
a um componente de função.Aqui está um componente sem renderização que anexa métodos de ciclo de vida por meio do ciclo de vida HOC (da recomposição).
fonte
Você pode fazer seus próprios métodos de ciclo de vida.
Funções utilitárias
Uso
fonte
De acordo com a documentação:
consulte a documentação do React
fonte
Se você precisar usar o React LifeCycle, precisará usar Class.
Amostra:
fonte
Você pode usar o módulo criar-reagir-classe. Documentação oficial
Claro, você deve primeiro instalá-lo
Aqui está um exemplo prático
fonte
se estiver usando o react 16.8, você pode usar os Ganchos react ... Os Ganchos React são funções que permitem que você “enganche” o estado do React e os recursos de ciclo de vida dos componentes da função ... docs
fonte