什么是命令式逃生舱口?

时间:2019-05-09 03:59:41

标签: javascript reactjs computer-science

我一直在阅读Dan Abramov的文章react as a rendering ui,看到了“命令式逃生舱口”一词。

我的问题是什么?有人可以举一个例子,什么时候有用。

2 个答案:

答案 0 :(得分:1)

Dan Abramov的文章中的术语可能与React文档的这一部分有关:https://reactjs.org/docs/design-principles.html#escape-hatches

简而言之,在某些情况下,React的声明方法不适用,因此您必须使用命令式解决方案。在React中使用checkbox来控制组件,例如用于DOM操作,被认为是当务之急。

答案 1 :(得分:0)

该术语是指命令性编程和功能性编程的组合。有关一些好的答案,请参见What is difference between functional and imperative programming languages?

使用纯功能性方法很难实现某些解决方案,但是如果您将大多数功能性编程与命令式编程的某些元素一起使用,则可以接近。在链接的文章中,那些不完全起作用的元素称为“命令式逃生舱口”。

在纯函数式编程中,方法不会修改系统的状态,并且在给定相同的输入时,它们总是返回相同的输出。名称为“ Thomas”且始终返回“ Hello Thomas”的函数符合该描述。带有“ Thomas”之类的名称,对用户进行地理位置定位并返回诸如“ Howdy Thomas”或“ G'day Thomas”之类的区域问候的函数不适合该描述。

可以重写第二个函数以接受两个参数(名称和位置),然后始终根据输入返回相同的结果,从而使其遵循功能范式。现在想象一下问候语是基于日期,月份,星期几,一天中的时间,地区和性别的。在函数式编程中,您需要将该状态打包为某种传递给函数的数据结构。实际上,调用getGreeting('Thomas',{date:5,month:'Jan',dayOfWeek:'Monday',等等。))而不是getGreeting('Thomas')并依赖于系统返回的状态其他功能或在全局变量中访问。

一个更复杂的示例是调用异步子例程,该例程需要花费大量时间才能完成。假设每2秒获取一次股票价格,则需要1到5秒才能完成。任务完成后,仅当UI是最新发送的数据而不是最新接收的数据时,才应更新UI。您不知道在调用该方法之前,是否会根据下一个股票价格请求更新UI,因此使用纯函数编程很难。不过,您可以使用一些命令式的逃生舱口。如果您将最近提交的请求发送的时间存储在全局变量中,则可以轻松决定何时使用返回的股票价格来更新UI,以及何时将缓慢返回的请求扔出。