Я не могу найти ничего нечистого в моей функции - PullRequest
0 голосов
/ 12 июля 2020

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

React.StrictMode API заставляет наш setState вызывать дважды, верно? Если он выдает ошибку, это означает, что где-то в нашем обратном вызове setState нечисто. Итак, какой именно?

setOrganization((initialValue) => {
    const newOrganization = { ...initialValue };

    const oldIssues = [...newOrganization.repository.issues.edges];
    const newIssues = [...data.data.organization.repository.issues.edges];

    newOrganization.repository.issues.edges = [...newIssues, ...oldIssues];

    return newOrganization;
});
  • При первом вызове oldIssues возвращает ожидаемое значение, например [{id: issue1}, {id: issue2}]. newIssues значение, например, [{id: issue3}]

  • Но при втором вызове oldIssues странным образом превращается в комбинацию oldIssues и newIssues. (второй вызов, oldIssues УЖЕ [{id: issue1}, {id: issue2}, {id: issue3}]).

  • Создание второго newOrganization.repository.issues.edges значения удвоило newIssues. [{id: issue1}, {id: issue2}, {id: issue3}, {id: issue3}]

Полный сценарий можно найти здесь, в строке 101: https://pastebin.com/ugsrBRTM

1 Ответ

1 голос
/ 12 июля 2020

Благодаря приведенному выше комментарию Ника Парсонса я просто знаю, что распространение объекта выполняет только неглубокую копию . Все, что мне нужно сделать, это изменить метод копирования на глубокую копию .

Я нашел здесь метод: Какой самый эффективный способ глубокого клонирования объекта в JavaScript?

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