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

105
Visualizações
Must React components be in hierarchy?

I have always been told that React components should be designed in a tree hierarchy so that the ancestor/parents can hold the state and pass it to their children.

I just wonder, is that a MUST?

The design principal of React is that "React has been designed from the start for gradual adoption, and you can use as little or as much React as you need." I just thought what if I have an existing project, and I want to add a bit of React components separately here and there without modifying most of the existing HTML/code? Can these components still communicate with one another?

For instance, let's say I want to add two separate React components at different positions in an existing plain HTML page, and I really like existing HTML to be non-Javascript generated/modified as it is. The two components are not in any hierarchy with each other. Can they still access each other's state? If one component gets updated (be it by user's click, AJAX response, etc), can this component notify the other to update itself or tell it to call a function?

I haven't tried anything yet, but I would have thought if I were really going to do the above, I would use global variables/functions as the last resort if nothing else works. However, I am more interested in learning any React-conventions/methods/best practice to achieve the above.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

If you had to share the state (only with React, at least), you'd have to wrap these components in a context and then render them on those separate places with Portals. I'm pretty sure that is doable, although it doesn't really answer your question, in this case the two components would be siblings that have a common parent, context provider.

A more reasonable solution would be to use e.g. Redux or similar solution. You'd have a single store and then you'd just call ReactDOM.render as many times as you want for each component that you want to mount somewhere on the page. Each of these components would have to be a child of a store provider (which is also a component) and then these components would be able to communicate through the store.

about 4 years ago · Juan Pablo Isaza Relatório

0

In very broad terms, what you're describing is event-driven programming and it most definitely can work. Some keywords to search for relevant prior work in the Javascript domain are "javascript event bus" and "javascript pub sub".

Event-driven programming was all the rage in the jQuery days and has somewhat fallen out of favor in the frontend world in the recent years, but that doesn't mean you can't use it. Be aware that while there are definitely upsides to event-driven programming, there are also a number of hard issues: async flows, events firing before listeners are ready for them, consistent state, etc. The links provided above have more information on those issues as well.

The architecture you describe is one way to do gradual adoption of React and it is a valid solution, you simply need to be aware of the tradeoffs. Depending on your use case, those tradeoffs may or may not make sense. At its core, React's design principles are somewhat at odds with event-driven architectures so personally I would advise against it. Paolostyle's answer is one good example of alternative solutions that allow you to do gradual adoption while still following React's own principles.

about 4 years ago · Juan Pablo Isaza Relatório
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