Jeśli ten sam scenariusz nie jest rozpowszechniony wszędzie, możesz użyć kontekstu React, szczególnie jeśli nie chcesz wprowadzać całego obciążenia, jakie wprowadzają biblioteki zarządzania stanem. Ponadto łatwiej się uczyć. Ale bądź ostrożny, możesz go nadużyć i zacząć pisać zły kod. Zasadniczo definiujesz komponent Container (który będzie przechowywał i utrzymywał ten stan dla Ciebie), dzięki czemu wszystkie komponenty będą zainteresowane zapisywaniem / odczytywaniem tego fragmentu danych jako jego elementy potomne (niekoniecznie bezpośrednie elementy potomne)
https://reactjs.org/docs/context.html
Zamiast tego możesz również użyć zwykłego Reacta.
<Component5 onSomethingHappenedIn5={this.props.doSomethingAbout5} />
przekazać doSomethingAbout5 aż do składnika 1
<Component1>
<Component2 onSomethingHappenedIn5={somethingAbout5 => this.setState({somethingAbout5})}/>
<Component5 propThatDependsOn5={this.state.somethingAbout5}/>
<Component1/>
Jeśli jest to częsty problem, powinieneś zacząć myśleć o przeniesieniu całego stanu aplikacji w inne miejsce. Masz kilka opcji, najczęściej są to:
https://redux.js.org/
https://facebook.github.io/flux/
Zasadniczo zamiast zarządzać stanem aplikacji w komponencie, wysyłasz polecenia, gdy coś się stanie, aby zaktualizować stan. Komponenty również pobierają stan z tego kontenera, więc wszystkie dane są scentralizowane. Nie oznacza to, że nie można już używać stanu lokalnego, ale jest to bardziej zaawansowany temat.