Как использовать json для состояния в React?

У меня есть данные в формате JSON, и я использую SetState в конструкторе

{
    index:index,
    key: key,
    all: {
         0: {name:'qwerty', id:'1', surname:'foo'}
         1: {name:'bar', id:'2', surname:'aaa'}
         2: {name:[
                0: {parent:'first'}
                1: {name:'second'}
              ]
            }
         }
    }

Если я напишу <span>{this.state.id}</span в рендере, все работает, но если я напишу что-то вроде <span>{this.state.all.0.name}</span> в рендере или конструкторе, это не сработает.

Я попробую:

this.state.all.0.name
this.state.all[index].name  //this is let var index = 1
this.state.all[0].name

Это потому, что я установил состояние в конструкторе из обещания, и в течение 2 секунд мое состояние не определено, как я могу отобразить после загрузки обещания?

Вам следует попробовать this.state.all['0']. Поскольку ваш ключ является строкой, с использованием числового значения JS попытается получить доступ к объекту как к неверному массиву.

Adam 08.10.2018 15:14

Это JavaScript, а не JSON!

Quentin 08.10.2018 15:17

@Adam - Они сказали, что пробовали this.state.all[0].name, который полностью эквивалентен this.state.all['0'].name. За исключением символов (которые не используются в этом примере), все имена свойств являются строками.

Quentin 08.10.2018 15:19

Я обнаружил проблему, но не знаю, как это сделать. Я обновляю вопрос

Miikkii 08.10.2018 15:31
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
970
1

Ответы 1

Если вы должны использовать индекс для доступа к значениям, используйте массивы вместо объектов, например:

this.state = {
  index:index,
  key: key,
  all: [
         {name:'qwerty', id:'1', surname:'foo'}, //0
         {name:'bar', id:'2', surname:'aaa'},    //1
         {name:[                                 //2
                 {parent:'first'},                   //0
                 {name:'second'},                    //1
               ],
         },
       ],

}

В этом примере this.state.all[2].name[0].parent === "first"

Другие вопросы по теме