Этот вопрос крутился в моей голове, так как я читал заметки о выпуске (и другую связанную рекламу) вокруг React 0.14 - я большой поклонник React, и я думаю, что компоненты без гражданства (https://facebook.github.io/react/blog/2015/09/10/react-v0.14-rc1.html#stateless-function-components) - отличная идея, как для удобства написания таких компонентов, так и для выражения в коде намерение, что эти компоненты должны быть "чистыми" в плане рендеринга последовательно для тех же реквизитов данных.
Возникает вопрос: как будет возможно, чтобы React оптимизировал эти функции безстоящих компонентов, не обращаясь к целиком и полагая, что ссылки на реквизиты не только неизменны, потому что им не следует манипулировать внутри компонента, но также и то, что они никогда не может измениться за пределами жизненного цикла компонента? Причина, по которой "обычные" компоненты (например, компоненты с состоянием - другими словами, компоненты, которые проходят весь жизненный цикл, компонентWillMount, getInitialState и т.д.) Имеют необязательную функцию "shouldComponentUpdate", так это то, что React не предполагает, что все реквизиты и государственные ссылки абсолютно неизменяемы. После того, как компоненты были обработаны, некоторые свойства ссылок реквизита могут измениться, и поэтому один и тот же экземпляр "реквизит" может иметь другое содержимое позже. Частично это вызвало много волнений по поводу использования полностью неизменяемых структур и почему было сказано, что использование Om с React могло бы принести большие выигрыши в производительности; потому что неизменяемые структуры, используемые там, гарантировали, что любой данный экземпляр какого-либо объекта никогда не может быть мутирован, поэтому mustComponentUpdate может выполнять действительно дешевые проверки равенства ссылок на реквизитах и состоянии (http://swannodette.github.io/2013/12/17/the-future-of-javascript-mvcs/).
Я пытался узнать больше об этом, но не получил нигде. Я не могу предусмотреть, какие улучшения производительности могут быть сделаны вокруг компонентов без гражданства, не предполагая, что данные реквизита будут состоять из неизменяемых типов. Возможно, некоторый предварительный анализ типов неизменяемых реквизитов, чтобы попытаться угадать, представляют ли "реквизиты" и "nextProps" те же данные?
Я просто задавался вопросом, есть ли у кого-то какая-либо внутренняя информация или какое-то иное просветляющее понимание этого. Если React действительно начал требовать, чтобы типы реквизитов были "полностью неизменными" (позвольте сравнению сравнения ссылок, чтобы подтвердить, что данные не изменились), я думаю, что это был бы большой шаг вперед, но это также может быть большим изменением.