У меня есть данные в формате 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 секунд мое состояние не определено, как я могу отобразить после загрузки обещания?
Это JavaScript, а не JSON!
@Adam - Они сказали, что пробовали this.state.all[0].name, который полностью эквивалентен this.state.all['0'].name. За исключением символов (которые не используются в этом примере), все имена свойств являются строками.
Я обнаружил проблему, но не знаю, как это сделать. Я обновляю вопрос



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вы должны использовать индекс для доступа к значениям, используйте массивы вместо объектов, например:
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"
Вам следует попробовать
this.state.all['0']. Поскольку ваш ключ является строкой, с использованием числового значения JS попытается получить доступ к объекту как к неверному массиву.