4
respostas

ComponentWillUnmount React

Boa noite. Estou com dúvidas sobre tal método do ciclo de vida do React e estou fazendo testes. Um deles, é cancelar uma requisição fetch, no entanto, não estou conseguindo. Aqui vai meu código:

const abortController = new AbortController()

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      load: true
    };
  }
  toogle = () => {
    const { load } = this.state;

    this.setState({ load: !load });
  };

  render(){
    const { load } = this.state
    return(
      <>
        {
          load?
          <>
            <h1>Principal</h1>
            <button onClick={this.toogle}>Clique</button>
          </>:
          <Teste click={this.toogle}/>

        }
      </>
    )
  }
}

class Teste extends Component {
  constructor(props) {
    super(props);
  }
  componentDidMount() {
    console.log("fui montado");
    fetch('https://pokeapi.co/api/v2/evolution-chain/?limit=6&offset=0',{
      signal: abortController.signal
    }).then(res => res.json()).then(res => console.log(res))
  }

  componentWillUnmount() {
    console.log("fui desmontado");
    abortController.abort()
  }

  render(){
    return(
      <>
        <h1>Alo</h1>
        <button onClick={this.props.click}>Clique</button>
      </>
    )
  }
}

Alguém tem alguma ideia do que possa ser?

Desde já, agradeço a atenção.

4 respostas

Boa noite! Como vai?

Não entendi qual é a sua dúvida. O seu código está gerando algum erro ou não está se comportando como vc esperava? O que está ocorrendo? Com as respostas dessas perguntas eu poderei te ajudar de forma mais efetiva!

Qualquer coisa é só falar!

Grande abraço e bons estudos!

Eu queria entender o motivo do abortController.abort() não estar funcionando, visto que o componente está sendo desmontado.

Opa! Como vai?

É gerado algum log de erro? Se sim, poderia colar ele aqui? Outra coisa, o que está acontecendo que indica a vc que o abortController.abort() não está funcionando? Eu tenho algumas coisas em mente, mas preciso entender melhor a situação para poder te orientar corretamente.

Não. Quando o console é montado aparece "fui montado" e quando é desmontado aparece "fui desmontado", como eu coloquei no código. Entretanto, as requisição não aparecem como canceladas na aba network do devtools do Chrome