// React import React, { useEffect } from 'react' import { Link, useLocation, useParams } from 'react-router-dom' // Redux import { useSelector, useDispatch } from 'react-redux' import { actionCreators as weatherForecastsActionCreators, WeatherForecast, WeatherForecastsState } from '../store/reducers/WeatherForecasts' interface IReduxState { weatherForecasts: WeatherForecastsState } type IParams = { startDateIndex: string } const FetchData = () => { const location = useLocation() const params = useParams() const dispatch = useDispatch() const { startDateIndex, forecasts, isLoading } = useSelector((state: IReduxState) => state.weatherForecasts) const ensureDataFetched = () => { dispatch(weatherForecastsActionCreators.requestWeatherForecasts( parseInt(params.startDateIndex ? params.startDateIndex : '0', 10) )) } // This method is called when the route parameters change useEffect(() => { ensureDataFetched() }, [location.pathname]) const renderForecastsTable = () => { return {forecasts.map((forecast: WeatherForecast) => )}
Date Temp. (C) Temp. (F) Summary
{forecast.date} {forecast.temperatureC} {forecast.temperatureF} {forecast.summary}
} const renderPagination = () => { const prevStartDateIndex = (startDateIndex || 0) - 5 const nextStartDateIndex = (startDateIndex || 0) + 5 return
Previous {isLoading && Loading...} Next
} return <>

Weather forecast

This component demonstrates fetching data from the server and working with URL parameters.

{ renderForecastsTable() } { renderPagination() } } export { FetchData }