#javascript #arrays #reactjs #react-native #asyncstorage
#javascript #массивы #reactjs #реагировать-родной #asyncstorage
Вопрос:
У меня есть массив вызываемых объектов audioBaby
.
Когда приложение запускается, я проверяю asyncStorage
, и если какой-либо ключ имеет значение active
, я хочу обновить lock
ключи в массиве.
То, что я сделал, — это обновление не всех объектов в массиве, а только последнего объекта.
Как я могу initially
обновить массив asyncStorage
и отобразить экран?
const [audioBaby, setAudioBaby] = useState([
{
lock: "deactive",
url: "item0.mp3",
},
{
lock: "deactive",
url: "item1.mp3",
},
{
lock: "deactive",
url: "item2.mp3",
},
]);
useEffect(() => {
try {
AsyncStorage.multiGet([
"babyAudio0Status", //value: active
"babyAudio1Status", //value: active
"babyAudio2Status", //value: active
]).then((response) => {
let updatedList = audioBaby;
if (response[0][1] != "null" amp;amp; response[0][1] == "active") {
updatedList = audioBaby.map((item) => {
if (item.url == "item0.mp3") {
return { ...item, lock: "active" };
}
return item;
});
}
if (response[1][1] != "null" amp;amp; response[1][1] == "active") {
updatedList = audioBaby.map((item) => {
if (item.url == "item1.mp3") {
return { ...item, lock: "active" };
}
return item;
});
}
if (response[2][1] != "null" amp;amp; response[2][1] == "active") {
updatedList = audioBaby.map((item) => {
if (item.url == "item2.mp3") {
return { ...item, lock: "active" };
}
return item;
});
}
setAudioBaby(updatedList)
});
} catch (error) {
console.log("error::", error);
}
}, []);
Конечный массив должен быть таким:
[
{
lock: "active",
url: "item0.mp3",
},
{
lock: "active",
url: "item1.mp3",
},
{
lock: "active",
url: "item2.mp3",
},
]
Комментарии:
1. Было бы полезно посмотреть, как
response
выглядит после вашегоmultiGet
. Кроме того, не связанный, вы должны использовать===
not==
и!==
not!=
, если у вас нет веской причины.2. Спасибо, я решил проблему и исправил равенства в соответствии с тем, что вы сказали.
Ответ №1:
Я переместил все if
s внутрь map
функции, и все в порядке.
let updatedList = audioBaby.map((item) => {
if (item.url === 'item0.mp3' amp;amp; response[0][1] === 'active') {
return { ...item, lock: 'active' }
}
if (item.url === 'item1.mp3' amp;amp; response[1][1] === 'active') {
return { ...item, lock: 'active' }
}
if (item.url === 'item2.mp3' amp;amp; response[2][1] === 'active') {
return { ...item, lock: 'active' }
}
return item
})