Я читал довольно много вещей, которые недавно пытались выучить реакцию и лучшие практики, и я неоднократно сталкивался с предложениями, говорящими: «Постарайтесь сохранить свою логику так высоко в цепочке, как возможное".React Page рекомендует рекомендацию поддерживать логику на высоком уровне
Я не понимаю, почему это предложение . Я понимаю, что это немного упрощает код, но я не вижу, как это обязательно будет хорошей практикой для проектов, которые становятся большими и сложными. Я также понимаю, что идеология, стоящая за реагированием, - «dom - медленный javascript быстро», и что переписывание shadow-DOM и «diff'ing» делает повторный рендеринг в DOM быстрее, но это просто кажется огромной тратой вычислительной техники время. Когда проект становится более интерактивным и более динамичным, похоже, что он перекомпонует то, что потенциально может быть длинным списком, скажем, более 1000 предметов, и будет тратить процессор вместо того, чтобы просто проверять (добавлять, перемещать, удалять и т. Д. .), что резко сократило бы CPU.
Есть ли причина, по которой подход к алгоритму Facebook рекомендуется использовать?
Подробнее о [примирение] (https://facebook.github.io/react/docs/reconciliation.html). Каждый виртуальный DOM не пересматривается каждый раз.Как вы увидите из статьи в этой статье, чем выше логика для реквизита/состояния, тем больше дерева можно исключить из примирения сразу. EDIT: vis и больше информации можно найти в разделе [advanced performance] (https://facebook.github.io/react/docs/advanced-performance.html). –
@MatthewHerbst Что заставляет вас так говорить? Без 'mustComponentUpdate', вся часть виртуального DOM, который грязно определенно * *, вычисляется каждый раз. Если состояние и логика живут выше в иерархии компонентов, это делает более вероятным, что * все * будет сверяться, несмотря ни на что, изменяющееся во многих компонентах (опять же, без 'shouldComponentUpdate', который является значением по умолчанию). * Diffing * различные виртуальные DOM могут быть упрощены, когда две структуры чрезвычайно разные, но чаще всего это не так. –
@ MichelleTilley OP говорит о массивной производительности приложения. Я предполагаю на этом уровне, что OP знаком с 'shouldComponentUpdate' /' PureRenderMixin'. Если ваш контроллер верхнего уровня имеет состояние, а все под ним просто получает вещи из реквизита, для PureRenderMixin тривиально предотвращать обновления, если реквизит не изменится. –