2016-02-08 5 views
3

Я пытаюсь сохранить массив файлов, которые пользователь выбрал для загрузки. Каждый файл представляет собой объект File. Я хотел бы добавить к нему другие свойства, такие как «прогресс» и «статус», чтобы я мог представить эти данные пользователю, когда они начнут процесс загрузки.Расширение или клонирование файла API API в редукторе Redux для поддержки других свойств

Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь «скопировать» объект File с использованием Object.assign() или JSON.parse(JSON.stringify(obj)), я только возвращаю свойства, которые я установил сам, а не значения, присущие объект.

Это пример одного из моих попыток использовать Object.assign():

Object.assign({}, state, { 
    files: [ 
     ...state.files.slice(0, payload.index), 
     Object.assign({}, state.files[payload.index], { 
      status: 'UPLOADING', 
      progress: 0 
     }), 
     ...state.files.slice(payload.index + 1) 
    ] 
}) 

Понятно, что это вызывает у меня всякие проблемы ...

Что такое хороший способ отслеживания файлов и возможность расширить свои свойства в подходящем для Redux режиме?

Спасибо всем заблаговременно.

ответ

2

Просто не пытайтесь хранить дополнительные свойства на объекте File. Вместо того, чтобы хранить их как братьев и сестер на родительском объекте:

// INIT case 
return { 
    ...state, 
    files: [ 
     ...state.files, 
     { fileObject, status: "INITIAL" } 
    ] 
}; 

// UPDATE case 
return { 
    ...state, 
    files: [ 
     ...state.files.slice(0, payload.index), 
     { ...state.files[payload.index], status: "UPLOADING", progress: 0 }, 
     ...state.files.slize(payload.index + 1) 
    ] 
}; 

В этой схеме:

// fileObject is the File 
const { fileObject, status, progress } = state.files[2]; 
+0

Спасибо! Я думаю, это был только один из тех дней ...: S –