Многие изменения, включая исправления ошибок и улучшения документации, можно реализовать и просмотреть с помощью обычного рабочего процесса запроса на включение GitHub.
Однако некоторые изменения являются «существенными», и мы просим, чтобы они прошли через небольшой процесс проектирования и привели к консенсусу среди основной команды React.
Процесс «RFC» (запрос комментариев) предназначен для обеспечения согласованного и контролируемого пути ввода новых функций в проект.
Активный список RFC
Чтобы принять ваш запрос на включение, нам нужно, чтобы вы отправили CLA. Вам нужно сделать это только один раз, поэтому, если вы сделали это для другого проекта Facebook с открытым исходным кодом, все готово. Если вы отправляете запрос на включение впервые, просто сообщите нам, что вы завершили CLA, и мы сможем перепроверить ваше имя пользователя GitHub.
Заполните свой CLA здесь.
Вам следует рассмотреть возможность использования этого процесса, если вы собираетесь внести «существенные» изменения в React или его документацию. Вот некоторые примеры, в которых может быть полезен RFC:
Новая функция, которая создает новую зону покрытия API, и в случае ее внедрения потребуется флаг функции.
Удаление функций, которые уже были включены в канал выпуска.
Введение новых идиоматических использований или соглашений, даже если они не включают изменения кода самого React.
Некоторые изменения не требуют RFC:
Перефразирование, реорганизация или рефакторинг
Добавление или удаление предупреждений
Дополнения, которые строго улучшают объективные числовые критерии качества (ускорение, лучшая поддержка браузеров).
Дополнения, вероятно, будут замечены только другими разработчиками React и невидимы для пользователей React.
Трудно написать RFC, который будет принят. Тем не менее, это не должно отговаривать вас от его написания.
React имеет очень ограниченную зону действия API, и каждая функция должна беспрепятственно работать со всеми другими функциями. Даже у членов команды, которые ежедневно работают над React полный рабочий день, на то, чтобы подготовиться и получить достаточный контекст для написания хорошего RFC, уходит больше года.
На практике React RFC служат двум целям:
RFC React Team отправляются членами React Team после обширного (иногда многомесячного или многолетнего) проектирования, обсуждения и экспериментов. На практике они составляют большинство объединенных на данный момент RFC. Целью этих RFC является ознакомление сообщества с проектом и предоставление возможности оставить отзыв. Мы читаем все комментарии к публикуемым нами RFC, отвечаем на вопросы и иногда включаем отзывы в предложение. Поскольку наше время ограничено, мы не склонны писать RFC для функции React, если не уверены, что она соответствует дизайну. Хотя может показаться, что большинство RFC команды React легко принимаются, на практике это происходит потому, что 98% идей остались в монтажной. Оставшиеся 2%, в отношении которых мы чувствуем себя очень уверенно и по поводу которых у команды есть консенсус, мы объявляем RFC для обратной связи с сообществом.
Сообщество RFC может быть отправлено кем угодно. На практике большинство RFC сообщества не объединяются. Наиболее распространенные причины, по которым мы отвергаем RFC, заключаются в том, что он имеет существенные пробелы или недостатки в проектировании, не работает согласованно со всеми другими функциями или не попадает в наше представление о сфере применения React. Однако объединение — не единственный критерий успеха RFC. Даже если дизайн API не соответствует тому направлению, в котором мы хотели бы двигаться, мы считаем обсуждения RFC очень ценными для исследований и вдохновения. Мы не всегда своевременно проверяем RFC сообщества, но всякий раз, когда мы начинаем работу над соответствующей областью, мы проверяем RFC в этой области и анализируем варианты использования и проблемы, опубликованные членами сообщества. Когда вы отправляете RFC, вашей основной целью должно быть не обязательно слияние его с React как есть, а создание насыщенной дискуссии с членами сообщества. Если ваше предложение позже будет принято, это здорово. Но даже если этого не произойдет, это не будет напрасно. В результате обсуждения часто формируется следующее предложение в той же проблемной области, независимо от того, исходит ли оно от сообщества или от команды React. Многие авторы библиотек читают обсуждения, поэтому RFC часто приводят к экспериментам сообщества и решениям для пользователей.
Мы применяем один и тот же уровень строгости как к RFC команды React, так и к RFC сообщества. Основное различие между ними заключается на этапе проектирования: RFC React Team обычно отправляются в конце процесса проектирования, тогда как RFC сообщества обычно отправляются в начале, чтобы дать ему толчок.
Короче говоря, чтобы добавить важную функцию в React, обычно сначала нужно объединить RFC с репозиторием RFC в виде файла уценки. На этом этапе RFC «активен» и может быть реализован с целью возможного включения в React.
Форк репозитория RFC http://github.com/reactjs/rfcs
Скопируйте 0000-template.md
в text/0000-my-feature.md
(где «my-feature» имеет описательное значение. Пока не присваивайте номер RFC).
Заполните RFC. Уделяйте внимание деталям: RFC, которые не содержат убедительной мотивации, не демонстрируют понимания влияния проекта или неискренне говорят о недостатках или альтернативах, как правило, принимаются плохо .
Отправьте запрос на вытягивание. В качестве запроса на включение RFC получит отзывы о дизайне от более широкого сообщества, и автор должен быть готов пересмотреть его в ответ.
Достигайте консенсуса и интегрируйте обратную связь. RFC, имеющие широкую поддержку, имеют гораздо больше шансов добиться прогресса, чем те, которые не получают никаких комментариев.
В конце концов, команда решит, является ли RFC кандидатом на включение в React. Обратите внимание, что командная проверка может занять много времени, и мы предлагаем вам сначала попросить членов сообщества просмотреть ее.
RFC, являющиеся кандидатами на включение в React, вступят в «период окончательного обсуждения», который продлится 3 календарных дня. Начало этого периода будет отмечено комментарием и тегом в запросе на включение RFC.
RFC можно изменить на основе отзывов команды и сообщества. Значительные изменения могут инициировать новый период окончательного обсуждения.
RFC может быть отклонен командой после завершения общественного обсуждения и комментариев, обобщающих причины отклонения. Затем член команды должен закрыть запрос на включение, связанный с RFC.
RFC может быть принят по окончании периода окончательного рассмотрения. Член команды объединит запросы на включение, связанные с RFC, после чего RFC станет «активным».
Как только RFC станет активным, авторы смогут реализовать его и отправить эту функцию в виде запроса на включение в репозиторий React. Стать «активным» — это не штамп, и, в частности, это еще не означает, что функция в конечном итоге будет объединена; это означает, что основная команда в принципе согласилась с этим и готова к его слиянию.
Более того, тот факт, что данный RFC был принят и является «активным», ничего не подразумевает ни о том, какой приоритет присвоен его реализации, ни о том, работает ли кто-нибудь над ним в настоящее время.
Изменения в активные RFC можно внести в последующих PR. Мы стремимся писать каждый RFC таким образом, чтобы он отражал окончательный дизайн функции; но природа процесса означает, что мы не можем ожидать, что каждый объединенный RFC действительно будет отражать конечный результат во время следующего основного выпуска; поэтому мы стараемся поддерживать каждый документ RFC в некоторой степени синхронизированным с языковой функцией, как и планировалось, отслеживая такие изменения с помощью последующих запросов на включение в документ.
Автор RFC не обязан его реализовывать. Разумеется, автор RFC (как и любой другой разработчик) может опубликовать реализацию на рассмотрение после того, как RFC будет принят.
Если вы заинтересованы в работе над реализацией «активного» RFC, но не можете определить, работает ли над этим кто-то еще, не стесняйтесь спрашивать (например, оставив комментарий по соответствующей проблеме).
В настоящее время команда React не может взять на себя обязательства по своевременному рассмотрению RFC. Когда вы отправляете RFC, вашей основной целью должно быть получение отзывов сообщества и создание насыщенной дискуссии. Команда React пересматривает текущий список проектов и приоритетов каждые несколько месяцев. Даже если RFC хорошо разработан, мы часто не можем сразу же интегрировать его. Однако мы считаем очень полезным каждые несколько месяцев просматривать открытые RFC и смотреть, не бросается ли что-нибудь в глаза. Всякий раз, когда мы начинаем работать над новой проблемной областью, мы также обязательно проверяем наличие предыдущей работы и обсуждений в любых связанных RFC и взаимодействуем с ними.
Мы читаем все RFC в течение нескольких недель с момента подачи. Если мы считаем, что дизайн хорошо подходит React, и если мы готовы его оценить, мы постараемся рассмотреть его раньше. Если мы сомневаемся в дизайне или у нас недостаточно информации для его оценки, мы оставим его открытым до тех пор, пока он не получит достаточно отзывов сообщества. Мы понимаем, что не получить своевременную проверку досадно, но вы можете быть уверены, что ни одна работа, которую вы вкладываете в RFC, не окажется напрасной.
Процесс RFC в React вдохновлен процессами Yarn RFC, Rust RFC и Ember RFC.
Мы уже меняли его в ответ на отзывы и готовы изменить его снова, если это необходимо.