#javascript #typescript #ecmascript-6
#javascript #typescript #ecmascript-6
Вопрос:
Я пытаюсь unshift
преобразовать значение массива в существующий массив, используя подход оператора распространения. получаю ошибку. кто-нибудь поможет мне найти правильный подход?
вот мой код :
uploadedFiles : [...state.uploadedFiles.unshift( (<fileActions.UploadFileSuccess>action).payload ) ]
получение ошибки в виде :
The Number is not array type
Заранее спасибо.
Комментарии:
1. Два кратких замечания: 1. Я собираюсь угадать по имени, которое
state
является объектом состояния реакции. Если это так, вы никогда не должны изменять его напрямую (чтоunshift
и происходит). 2....
не является оператором. 🙂
Ответ №1:
unshift
изменяет массив и возвращает новую длину массива, которая является числом и которая не может быть расширена. Ваш код сводится к:
[...state.uploadFiles.length]
Теперь, чтобы сделать это неизменяемым и правильным способом, не используйте отмену сдвига, просто добавьте элемент в массив перед распространением предыдущей версии:
[action.payload, ....state.uploadFiles]
Комментарии:
1. попытка, которую я предпринял, чтобы добавить новый объект в качестве первого члена массива. как и в вашем предложении, он помещает новый элемент в качестве последнего…
2. @user2024080 — Нет, приведенное выше определенно делает
action.payload
первую запись в результирующем массиве.
Ответ №2:
Array#unshift
возвращает новую длину массива.
Вам нужно просто взять элемент без распространения.
uploadedFiles: [(<fileActions.UploadFileSuccess>action).payload, ...state.uploadedFiles]
Если вы хотите обновить, state.uploadedFiles
вы могли бы unshift
заранее.
state.uploadedFiles.unshift((<fileActions.UploadFileSuccess>action).payload);
uploadedFiles: [...state.uploadedFiles]