You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/content/learn/you-might-not-need-an-effect.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -408,8 +408,10 @@ function Game() {
408
408
409
409
У этого кода две проблемы.
410
410
411
+
411
412
Первая заключается в том, что это очень неэффективно: компонент (и его дочерние элементы) должны перерисовываться между каждым вызовом `set` в цепочке. В приведенном выше примере, в худшем случае (`setCard` → рендер → `setGoldCardCount` → рендер → `setRound` → рендер → `setIsGameOver` → рендер) происходят три ненужные перерисовки дерева.
412
413
414
+
413
415
Даже если это кажется быстрым, с течением времени, при росте вашего кода, вы столкнетесь с ситуациями, когда созданная вами "цепочка" не соответствует требованиям. Представьте, что нужно добавить возможность просматривать историю ходов игры. Этого можно было бы добиться, обновляя каждую переменную состояния до прошлого значения. Однако установка состояния `card` на значение из рендера снова запустит цепочку эффектов и изменит отображаемые данные. Такой код часто является очень хрупким.
414
416
415
417
В этом случае лучше вычислять то, что можно, во время рендеринга, и корректировать состояние в обработчике событий:
Например, код для `MarkdownPreview` не загрузится, пока его не попытаются вызвать. Если `MarkdownPreview` ещё не загрузился, на его месте отобразится `Loading`. Попробуйте поставить галочку в чекбоксе:
0 commit comments