Реактивный компонент не перерисовывается при обновлении реквизита - PullRequest
0 голосов
/ 23 марта 2019

Быстрая информация для описания контекста. Я работаю с компонентом дерева, который получает в качестве опоры такую ​​модель данных:

workfolder: [{
    label: "test",
    folders: [
        { label: "label 1", id: 1 },
        { label: "label 2", id: 2 },
        { label: "label 3", id: 3 }
    ]
}];

Все данные хранятся в хранилище Redux.

Начальное значение:

state: { workfolder: [] }

При монтировании я выбираю значения по умолчанию и объединяю результаты с workfolder в редукторе, и я получаю свое дерево.

return {
  ...state,
  workfolder: results
}

Когда я нажимаю на одну из меток (метка 3), я снова выбираю подпапки, используя id, и получаю:

[{ label: "label 5", id: 5 },{ label: "label 5", id: 5 }]

На этом этапе в редукторе я использую библиотеку для зацикливания вглубь состояния, пока не найду свойство, соответствующее id элемента, на который я нажал (метка 3 в данном случае), и хочу объединить вложенные папки в новый атрибут папки.

let newState = JSON.parse(JSON.stringify(state.workfolder));

deepForEach( newState, (value, key, subject, path) => { 
    const isParentFolder = value === action.payload.parent;
    const hasNotFolders = !subject.folders;

    if( isParentFolder && hasNotFolders ) {

        subject.folders = action.payload.node

    }

} );

затем я объединяю новое состояние в магазине:

return {
    ...state,
    workfolder: newState
}

Следуя этому пути, я получаю обновление магазина, но компонент не будет перерисовываться.

ПРИМЕЧАНИЕ: это фиктивный пример. В реальной жизни мне приходится иметь дело с многоуровневым вложенным объектом, имеющим только id и string, содержащий путь атрибута, который я хочу изменить в магазине. Пример, который я нашел в в документации по редуксу , показывает, как сделать это статически, записывая слияние ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...