Почему в компоненте не обновляется стейт?
let data = {};

await fetch(url).then((res) => res.json()).then(json => {
    data = { temperature: json.main.temp }
})
return data;
Это что за дичь? Пусть будет return fetch(url).then(r => r.json());.

this.setState(() => {
    return { weather: this.askForWeather.getNeededData() }
});
Засовываете промис в стейт. Что-то сомневаюсь, что так и было задумано. Меняйте на

this.askForWeather.getNeededData().then(weather => {
  this.setState(() => ({ weather }));
});
<Main temperature={this.state.weather.temperature}/>
Пока weather имеет значение null, попытки прочитать свойства будут приводить к ошибке. Так что

{this.state.weather && <Main temperature={this.state.weather.main.temp} />}
В пропс Main передаете this.state.weather.temperature, то есть поле объекта weather, но его не существует, так как изначально он null, но метод рендер не ждет, пока совершится запрос и сразу пытается передать пропс при вызове render.
Сделайте проверку на null объекта this.state.weather или добавьте в состояние поле готовности