2 years ago

#62631

test-img

bassman21

How to prevent my parent React component to re-render and to re-initialize my context?

I would like to use useContext to store a user. Unfortunately, my parent React component App re-renders everytime I change "pages". Specifically, when I am on page "/login" and I change to page "/" or "/register" the parent App component gets re-rendered. Therefore, my user gets reset to "null".

How can I prevent my parent component App from re-rendering, and why does it re-render anyway? Thank you very much for pointing me in the right direction?

function App() {
  const [user, setUser] = useState<User | null>(null);
  const providerValue = useMemo<ProviderValue>(
    () => ({ user: user, setUser: setUser }),
    [user, setUser]
  );

  useEffect(() => {
    console.log('App component rendered!');
  }, []);

  return (
    <Router>
      <UserContext.Provider value={providerValue}>
        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/login" element={<Login />} />
          <Route path="/register" element={<Register />} />
        </Routes>
      </UserContext.Provider>
    </Router>
  );
}

export default App;

On page "login" the user is set like this:

const login = async () => {
    const user = await userLogin();

    if (providerValue && providerValue.setUser) {
      providerValue.setUser(user);
    }
  };

After that, my idea would be to redirect to any other page. However, whatever page I redirect to, the parent App component is re-rendered and the user reset to "null".

reactjs

use-context

0 Answers

Your Answer

Accepted video resources