Что такое спасательный люк? - PullRequest
0 голосов
/ 09 мая 2019

Я читал статью Дана Абрамова реагировал как пользовательский интерфейс рендеринга и видел термин "императивный выходной люк".

Мой вопрос: что это? Может ли кто-нибудь привести пример одного и когда это будет полезно.

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Термин в статье Дана Абрамова может относиться к этому разделу React docs: https://reactjs.org/docs/design-principles.html#escape-hatches.

Вкратце, бывают случаи, когда декларативный подход React неприменим, следовательно, вместо этого вы должны применить императивное решение. Использование refs в React для управления компонентами, например, для манипулирования DOM, считается обязательным.

0 голосов
/ 09 мая 2019

Термин относится к комбинации императивного программирования и функционального программирования. См. В чем разница между функциональным и императивным языками программирования? для нескольких хороших ответов.

Может быть трудно реализовать некоторые решения с чисто функциональным подходом, но вы можете приблизиться, если будете использовать в основном функциональное программирование с некоторыми элементами императивного программирования. Те элементы, которые не являются чисто функциональными, упоминаются в связанной статье как «обязательные спасательные люки».

В чисто функциональном программировании методы не изменяют состояние системы, и они всегда возвращают один и тот же вывод, если дан один и тот же ввод. Функция, которая принимает имя типа «Thomas» и всегда возвращает «Hello Thomas», соответствует этому описанию. Функция, которая принимает имя типа «Томас», геолокации пользователя и возвращает региональное приветствие, например «Хауди Томас» или «G'day Томас», не соответствует этому описанию.

Можно переписать эту вторую функцию, чтобы она принимала два параметра, имя и местоположение, а затем всегда возвращать один и тот же результат на основе ввода, тем самым заставляя его придерживаться функциональной парадигмы. Теперь представьте, что приветствие основано на дате, месяце, дне недели, времени дня, регионе и поле. В функциональном программировании вам необходимо упаковать это состояние в некоторую структуру данных, которая передается в функцию. Фактически, вызывая getGreeting ('Thomas', {date: 5, month: 'Jan', dayOfWeek: 'Monday' и т. Д.}) Вместо getGreeting ('Thomas') и полагаясь на состояние системы, возвращаемое другие функции или доступ в глобальных переменных.

Более сложный пример - вызов асинхронной подпрограммы, выполнение которой занимает разное время. Допустим, получение цены акций каждые 2 секунды, и это занимает от 1 до 5 секунд. После выполнения задачи пользовательский интерфейс следует обновлять только в том случае, если это самые последние отправленные данные, а не последние полученные данные. Вы не знаете, будет ли пользовательский интерфейс обновлен на основе следующего запроса цены акций, прежде чем этот запрос будет возвращен при вызове метода, так что это было бы сложно сделать с чисто функциональным программированием. Вы можете использовать маленький обязательный спасательный люк, хотя. Если вы храните время, когда последний обработанный запрос был отправлен в глобальной переменной, вы можете легко решить, когда использовать возвращенную цену акций для обновления пользовательского интерфейса, а когда отбрасывать медленно возвращаемые запросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...