Реакция мелкого сравнения работает с несколько раз? - PullRequest
1 голос
/ 16 апреля 2019

Согласно В Redux, необходимо ли делать глубокое копирование , чтобы обрабатывать обновления вложенных объектов, мы должны сделать несколько неглубоких копий вместо глубокой копии.

И согласноДокументация Redux,

Использование поверхностной проверки равенства в Redux требует неизменности, если какие-либо подключенные компоненты должны корректно обновляться.Чтобы понять почему, нам нужно понять разницу между мелкой и глубокой проверкой равенства в JavaScript.

Итак, у меня есть два вопроса.

  1. Это поверхностное равенствопроверка означает, что множественное поверхностное равенство проверяется на вложенных объектах, что сделано с несколькими поверхностными копиями?Если нет, то как только одно поверхностное равенство правильно определяет неизменяемость глубоко вложенного объекта?

  2. Согласно https://redux.js.org/faq/performance#do-i-have-to-deep-clone-my-state-in-a-reducer-isnt-copying-my-state-going-to-be-slow, поверхностная копия быстрее, чем глубокая, поэтому настаивайте не использоватьглубокая копия.Я это понимаю.Но мы должны использовать поверхностное копирование несколько раз, чтобы сохранить неизменность вложенных объектов.Так разве не то, что несколько раз поверхностного и глубокого копирования имеют одинаковую производительность в отношении неизменности?

1 Ответ

0 голосов
/ 16 апреля 2019

Это означает, что необходимо копировать только обновленные части состояния. если state.foo необходимо обновить, должны быть выборочные мелкие копии:

{
  foo: {...prevState.foo, newValue},
  bar
}

Не глубокая копия всего состояния:

{
  foo: {...prevState.foo, newValue},
  bar: {...prevState.bar}
}

Это приводит к повышению производительности и позволяет предположить, что части состояния, которые проходят неглубокую проверку на равенство, не были изменены, как prevState.bar === newState.bar.

...