В настоящее время я работаю над погодным приложением, созданным с помощью response-create-app, которое работает на React Router для отображения данных за 5 разных дней.Каждый день (представлен в рамке) представляет собой ссылку, которая перенаправляет второй компонент на него, чтобы он мог отображать более подробные данные за определенный день.
У меня есть функция, которая генерирует данные для каждой плитки:
generateTileData() {
const weatherData = this.state.data;
if (!weatherData) return null;
let days = [];
const newData = [...weatherData].filter(day => {
let dateFromAPI = moment.unix(day.dt).date();
if (days.indexOf(dateFromAPI) > -1) {
return false;
} else {
days.push(dateFromAPI);
return true;
}
});
// console.log(days)
return newData.map((day, item) => {
const dateId = day.dt;
return (
<Link to={`/w/${dateId}`}>
<WeatherTile key={day.dt} index={item} {...day} date={day.dt_txt} />
</Link>
);
});
}
Что затем отображается:
<HashRouter>
<React.Fragment>
<div className="columns is-gapless tiles">
{this.generateTileData()}
</div>
{weatherData && <Route exact path="/w/:dateId" render={({ match }) => <Weather data={weatherData} day={[...weatherData].find(day => day.dt == match.params.dateId)} />} />}
</React.Fragment>
</HashRouter>
Проблема заключается в том, что при извлеченииданные (через форму) только после того, как пользователь вводит их, когда я случайно обновляю страницу, приложение не знает, откуда поступают данные, и, таким образом, выдает мне приятную ошибку, что оно не может прочитать свойство main из undefined (как вмой компонент Погода:
const Weather = ({ day }) => {
console.log(day);
const data = day;
return (
<div className="info">
<p>{data.main.temp}</p>
<p>{data.main.humidity}</p>
</div>
)
}
Можно ли как-либо запретить пользователю обновление или по умолчанию перенаправить пользователя при обновлении на главную страницу (это будет путь = "/")?