Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.03.2021, 15:49
Аспирант
Отправить личное сообщение для djekokma Посмотреть профиль Найти все сообщения от djekokma
 
Регистрация: 09.10.2018
Сообщений: 36

Свойства объекта при деструктуризации
Добрый день.
Приложений на React.js, но вопрос касается javascript.
При доступе к свойствам объекта temp, feels_like, temp_min, temp_max, pressure, я получаю сообщение об ошибке "TypeError: Cannot destructure property 'temp' of 'previously' as it is undefined."
Что я делаю не так, в чем моя ошибка?

const App = () => {
    const [data, setData] = useState({}) 

    useEffect(() => {
        fetch('http://api.openweathermap.org/data/2.5/forecast?q=London&&appid=47f0bb1e397d9c96b56ba33f697a4ea5')
            .then(res => res.json())
            .then(result => setData(result))
    }, [])

 const obj = Object.values(data)
    const [ , , ,ret, ]=obj
    const now = ret?.[0]?.main
    const{temp, feels_like, temp_min, temp_max, pressure, sea_level, grnd_level, humidity, temp_kf} = now

return(
<div>
</div>
)
}
Ответить с цитированием
  #2 (permalink)  
Старый 05.03.2021, 16:02
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,700

Объект now связан как-нибудь с тем, что вы получаете из fetch?
Если да, то он будет скорее всего undefined. Так как

const obj = Object.values(data)
    const [ , , ,ret, ]=obj
    const now = ret?.[0]?.main
    const{temp, feels_like, temp_min, temp_max, pressure, sea_level, grnd_level, humidity, temp_kf} = now


будут выполняться раньше, чем придет ответ от fetch и будут выполнены все then
Ответить с цитированием
  #3 (permalink)  
Старый 05.03.2021, 16:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

djekokma,
может вы хотели так ...
const {list} = data;
const now = list?.[0]?.main;
const{temp, feels_like, temp_min, temp_max, pressure, sea_level, grnd_level, humidity, temp_kf} = now;
Ответить с цитированием
  #4 (permalink)  
Старый 05.03.2021, 16:21
Аспирант
Отправить личное сообщение для djekokma Посмотреть профиль Найти все сообщения от djekokma
 
Регистрация: 09.10.2018
Сообщений: 36

Можно конечно и так, но данная ошибка никуда не девается при добавлении строки 4
Ответить с цитированием
  #5 (permalink)  
Старый 05.03.2021, 17:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

react загрузка данных
djekokma,
макет здесь может не сработать, но примерно так
<!DOCTYPE html>
<html>
<head>
    <title></title>

</head>
<body>
    <div id="root"></div>
    <script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
    <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.25.0/babel.min.js"></script>
    <script type="text/babel">

function Example() {
    const [data, dataSet] = React.useState(null)

    React.useEffect(() => {
        async function fetchMyAPI() {
            let response = await fetch('https://api.openweathermap.org/data/2.5/forecast?q=London&&appid=47f0bb1e397d9c96b56ba33f697a4ea5')
            response = await response.json()
            dataSet(response)
        }

        fetchMyAPI()
    }, [])
    if (data === null) {
        return 'Загрузка...';
    }

    const {list} = data;
    const now = list[0].main;
    const{temp, feels_like, temp_min, temp_max, pressure, sea_level, grnd_level, humidity, temp_kf} = now;
    return <div>feels_like : {feels_like}</div>
}


ReactDOM.render(<Example />, document.getElementById("root"))

    </script>
</body>
</html>

Последний раз редактировалось рони, 05.03.2021 в 18:03. Причина: https://api добавил s сейчас работает
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Proxy объекта DOM: ошибка Illegal invocation при изменении style Ekaterina8888 Общие вопросы Javascript 2 05.04.2020 22:33
window.onscroll при достижении объекта на странице выполнить функцию linki Общие вопросы Javascript 1 03.01.2016 20:38
Отрицательные свойства у объекта zhurchik Общие вопросы Javascript 12 24.10.2014 21:00
Фиксация объекта при скрулинге страницы Pashok(one) Общие вопросы Javascript 10 08.01.2013 02:52
Теряется event при перемещении объекта (Drag&Drop) seagor Events/DOM/Window 16 25.07.2007 01:28