leonardogb / Red-Tetris

0 stars 1 forks source link

React Warning: Cannot update a component (`App`) while rendering a different component (`Login`). #6

Closed leonardogb closed 4 years ago

leonardogb commented 4 years ago
Warning: Cannot update a component (`App`) while rendering a different component (`Login`). To locate the bad setState() call inside `Login`, follow the stack trace as described in https://fb.me/setstate-in-render
    in Login (created by Context.Consumer)
    in Route (created by App)
    in Switch (created by App)
    in Router (created by HashRouter)
    in HashRouter (created by App)
    in div (created by App)
    in div (created by App)
    in App
    in Provider
leonardogb commented 4 years ago

Sur le composent Login il y avait un if qui dispachait une action en dehors d'un useEffect.

useEffect(() => {
    if (player && player.name) {
      socket.emit('removePlayer');
    }

    socket.on('connect', () => {
      socket.emit('setPlayerGames');
    });

    if (player && player.timer !== null) {
      dispatch(action.setIsPlaying(false));
      dispatch(action.setTimer(null));
    }
  }, []);

    if (player && player.delay !== null) {
      dispatch(action.setDelay(null));
    }

Il faut le mettre dans un useEffect pour eviter trop de renders.

useEffect(() => {
    if (player && player.name) {
      socket.emit('removePlayer');
    }

    socket.on('connect', () => {
      socket.emit('setPlayerGames');
    });
    if (player && player.delay !== null) {
      dispatch(action.setDelay(null));
    }
    if (player && player.timer !== null) {
      dispatch(action.setIsPlaying(false));
      dispatch(action.setTimer(null));
    }
  }, []);