我一直在阅读Dan Abramov的文章react as a rendering ui,看到了“命令式逃生舱口”一词。
我的问题是什么?有人可以举一个例子,什么时候有用。
答案 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,以及何时将缓慢返回的请求扔出。