Ir ao conteúdo

Posts recomendados

Postado

Eu tenho um menu hamburguer onde clico e alera o state , confirmei no log tudo ok .

porém na hora de por a classe certa ele não altera , mas se eu alterar o estado do state ele some caso true e aparece caso false

 

const {aberto ,setOpen,abrir} = useHamburguer() // destruturando o que quero do meu hook

// esse e o container que aparece e some

<div className = {aberto ? style.containerInfo : style.containerInfoOff}>
        <div className = {style.infos}>
           <BarraPesquisa/>
           <UserHeader value = {logado}/>
        </div>
</div>


hook personalizado 

import React from 'react'

const useHamburguer = () => {
    let [aberto , setOpen] = React.useState(true);

   

    function abrir (){
        setOpen(!aberto)
        console.log(aberto)
    }



    return{
       aberto,
       setOpen,
       abrir,
    }
}

export default useHamburguer

 

  • 3 semanas depois...
Postado

Não é ideal usar "let", altere para "const"

Em 29/06/2021 às 16:13, WilliamNascimento disse:
    let [aberto , setOpen] = React.useState(true);

Caso queira mais detalhes: https://github.com/facebook/react/issues/13982#issuecomment-433349510

Caso queria ler o Pull Request da issue react#13982: https://github.com/expo/expo/pull/7761

 

Esse bug está acontecendo porque o scopo está voltando ao normal e o React está renderizando do zero, não sei como está toda a sua chamada, mas simulei seu código e funcionou perfeitamente: https://codesandbox.io/s/romantic-smoke-joet0?file=/src/App.js

 

Caso tenha problemas em ver o código em execução: https://joet0.csb.app/

 

Provavelmente você deve estar usando renderização por servidor o que pode estar causando esse bug, acredito que a melhor solução seja definir o:

  function abrir() {
    setOpen(!aberto);
  }

no mesmo escopo do hamburgue dai você não deve perder o state do "open/setOpen"

 

Outra solução mais completa e profissional seria usar o Redux, dai você vai eliminar TODOS OS PROBLEMAS de states entre componentes e hooks. :D

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!