React doesn't remember anything.. localStorage does!
To make the Home component able to restore the last fetched matchday, I can use the localStorage object.
Window.localStorage is a small memory hosted by the clients' browser and it can be used to store some "helpers" values. To learn more about it, take a look at https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage.
Fetching the last fetched matchday
So, in the Home.tsx
constructor(props: IProps) { super(props); /** localStorage **/ let matchday; if (localStorage.getItem('lastFetchedMatchday')) { matchday = Number(localStorage.getItem('lastFetchedMatchday')); } else { matchday = 1; localStorage.setItem('lastFetchedMatchday', matchday.toString()); } /** localStorage **/ this.state = { matchday, matches: [], competition: null, error: false, totalMatchdays: 38, }; } The code above, before setting the initial state, checks for a record in the localStorage. This record is a key, value pair with the key equal to lastFetchedMatchday.
At line 7 I used Number(...) because the value I got from localStorage is a string and it needed to be converted into a number (as defined with the interface).
Setting the last fetched matchday
The value I fetch from the localStorage needs to be set somewhere in the application. It makes sense to me setting it when I select a new matchday from the select element.
handleChange = (event: any) => { this.setState({ matchday: event.target.value }, () => { /** localStorage **/ localStorage.setItem('lastFetchedMatchday', this.state.matchday.toString()); /** localStorage **/ this.fetch(); }); }; As before, I used this.state.matchday.toString() because localStorage stores strings as I can see from the method definition
Storage.setItem(key: string, value: string): void
Conclusion
At this point, once picked a matchday from the select, I don't lose my last selection even if I reload the page or if I close the browser.

Top comments (0)