Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

172
Visualizações
useParams of react router dom causes re-rerendering when modal is open and closed

I'm showing a detail of item on DetailPage component. DetailPage renders ItemDetail component, and when I click a button on header in Layout, Modal appears to add or update an item. Modal is provided by react-modal library.

// App.jsx

function App({ storage }) {
  const [items, setItems] = useState(storage.getData() || []);
  const [modal, setModal] = useState({ isOpen: false, item: null });

  const openModal = useCallback(
    item => setModal({ isOpen: true, item: item || null }),
    []
  );

  const closeModal = useCallback(
    () => setModal({ isOpen: false, item: null }),
    []
  );

  return (
    <>
      <Routes>
        <Route
          element={
            <Layout openModal={openModal} />
          }
        >
          <Route
            path=":id"
            element={
              <DetailPage
                items={items}
              />
            }
          />
        </Route>
      </Routes>

      <Modal
        isOpen={modal.isOpen}
        onRequestClose={closeModal}
      >
        <ItemForm
          item={modal.item}
        />
      </Modal>
    </>
  );
}
// DetailPage.jsx

const DetailPage = memo(props => (
  <main>
    <ItemDetail {...props} />
  </main>
));
// ItemDetail.jsx

const ItemDetail = memo(({ items }) => {
  **const { id } = useParams();**
  console.log('re-render')
})

Let's say I'm on DetailPage (for example http://localhost:3000/1). When I use useParams like above in ItemDetail and click the modal trigger button, ItemDetail re-renders. but when I delete that code line, ItemDetail doesn't re-render because I used memo(). Why is this happening?

about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda