Мне удалось создать массив с именем postArrays , содержащий объекты из нескольких других массивов, но мне нужно загрузить его в локальное состояние, чтобы я мог обновлять его из реквизитов.
Я не знаю, как это упростить. Это действительно потянуло меня, просто чтобы построить нормальный массив, используя push, который изменяет состояние.
Я пробовал несколько вариантов этого, но не могу понять, как это сделать, не изменяя состояния.
state = { postArrays: []} // empty array in state to update
let postArrays = []; // the array that needs pushing to state
if (posts) {
postArrays = posts.reduce((acc, obj) => {
if (obj.post_type) {
if (!acc[obj.post_type.social.name]) {
acc[obj.post_type.social.name] = [];
}
acc[obj.post_type.social.name].push({
id: obj.id,
contentType: { value: obj.post_type.id, label: obj.post_type.name },
date: obj.publication_date,
});
}
return acc;
}, []);
if (!this.state.postsLoaded) {
for (let key in postArrays) {
this.setState(
{ postArrays: [key.toLocaleLowerCase()]: postArrays[key] },
this.setState({ postsLoaded: true }),
);
}
}
}
Когда я делаю это
this.setState({postArrays})
Превышена максимальная глубина обновления, и приложение вылетает
Ниже выводится массив
[
{
"name":"facebook",
"options":[
{
"value":10,
"label":"Live",
"id":null
},
{
"value":6,
"label":"Photo",
"id":null
},
{
"value":8,
"label":"Story",
"id":null
},
{
"value":7,
"label":"Video",
"id":null
}
]
},
{
"name":"instagram",
"options":[
{
"value":13,
"id":null
},
{
"value":3,
"label":"Carousel",
"id":null
},
{
"value":5,
"label":"IgTV",
"id":null
},
{
"value":12,
"label":"Live",
"id":null
},
{
"value":1,
"label":"Picture",
"id":null
},
{
"value":4,
"label":"Story",
"id":null
},
{
"value":2,
"label":"Video",
"id":null
}
]
},
{
"name":"youtube",
"options":[
{
"value":11,
"label":"Video",
"id":null
}
]
}
]
Когда я обновлю его с помощью реквизита, я буду добавлять новые посты, внутри динамически добавляемых вложенных массивов
На данный момент мне удалось добавить следующее внутри локального состояния, но не удалось добавить fieldArrays []
"instagram":[
{
"id":2,
"contentType":{
"value":1,
"label":"Picture"
},
"date":"2019-03-19T16:16:07Z"
},
{
"id":155,
"contentType":{
"value":1,
"label":"Picture"
},
"date":"2019-04-01T11:51:31Z"
}
]
Мне нужно иметь возможность добавлять больше сообщений, не зная, какие ключи будут заранее,