Ponowne renderowanie komponentu po zmianach w localStorage - React.js

Ponowne renderowanie komponentu po zmianach w localStorage - React.js
K3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Czy jeśli np mam w React.js komponent <Header>, który służy do renderowania headera mogę w jakiś sposób ponownie go wyrenderować po zmianach w localStorage? Po pierwszym renderingu ponownie on się nie renderuje, ponieważ nic w nim się nie zmienia. Jednak po tym jak zostanie wpisane coś do localStorage chciałym ponownie go wyrenderować aby dodać pewny element do niego.

TS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 394
1

localStorage emituje event, gdy coś się zmienia. Wystarczy, że to obsłużysz.

https://developer.mozilla.org/en-US/docs/Web/API/Window/storage_event

K3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

@tsz: dzięki, ale co w tym evencie należałoby zrobić aby ponownie wybrany komponent wyrenderować?

I czy sessionStorage też coś takiego posiada?

Dodałem w componentDidMount event storage, ale w ogóle on się nie wykonuje przy wpisywaniu czegoś do localStorage. Dodam, że do localStorage wpisuje coś w innym komponencie.

TS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 394
0

A jak to zaimplementowałeś? Ja właśnie sobie z powodzeniem strzeliłem takim eventem pomiędzy dwoma zakładami z 4P. Dla sessionStorage oczywiście też powinno działać.

bearek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 85
0

@tsz: ale przecież ten event działa tylko w innych otwartych kartach:

The StorageEvent is fired whenever a change is made to the Storage object (note that this event is not fired for sessionStorage changes). This won't work on the same page that is making the changes — it is really a way for other pages on the domain using the storage to sync any changes that are made. Pages on other domains can't access the same storage objects.

Coś bajdurzysz :)

K3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Taki kod dodałem w headerze:

Kopiuj
class Header extends Component {
  
  componentDidMount() {
    window.addEventListener("storage", this.storageEventHandler);
  }

  storageEventHandler(evt) {
    alert("storage updated");
  }

W innym komponencie do localStorage coś wpisuje po wysłaniu forma, ale alert się nie wyświetla.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.