import * as React from 'react'; import { Link } from 'react-router'; import { provide } from 'redux-typed'; import { ApplicationState } from '../store'; import * as WeatherForecastsState from '../store/WeatherForecasts'; interface RouteParams { startDateIndex: string; } class FetchData extends React.Component { componentWillMount() { // This method runs when the component is first added to the page let startDateIndex = parseInt(this.props.params.startDateIndex) || 0; this.props.requestWeatherForecasts(startDateIndex); } componentWillReceiveProps(nextProps: WeatherForecastProps) { // This method runs when incoming props (e.g., route params) change let startDateIndex = parseInt(nextProps.params.startDateIndex) || 0; this.props.requestWeatherForecasts(startDateIndex); } public render() { return

Weather forecast

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

{ this.renderForecastsTable() } { this.renderPagination() }
; } private renderForecastsTable() { return {this.props.forecasts.map(forecast => )}
Date Temp. (C) Temp. (F) Summary
{ forecast.dateFormatted } { forecast.temperatureC } { forecast.temperatureF } { forecast.summary }
; } private renderPagination() { let prevStartDateIndex = this.props.startDateIndex - 5; let nextStartDateIndex = this.props.startDateIndex + 5; return

Previous Next { this.props.isLoading ? Loading... : [] }

; } } // Build the WeatherForecastProps type, which allows the component to be strongly typed const provider = provide( (state: ApplicationState) => state.weatherForecasts, // Select which part of global state maps to this component WeatherForecastsState.actionCreators // Select which action creators should be exposed to this component ).withExternalProps<{ params: RouteParams }>(); // Also include a 'params' property on WeatherForecastProps type WeatherForecastProps = typeof provider.allProps; export default provider.connect(FetchData);