最近在学习中遇到一些问题,就顺手记录下来。
说到这里,我们先来看看存在的“问题”。
这是一个非常经典的例子,页面上呈现了三个。当我单击时,页面被重新呈现为。
这个时候,当我点击按钮时,因为计时器的原因,不会立即完成。此时,我正在单击修改。
两秒钟后,您将发现页面上显示的最新值,并且弹出窗口保持不变。
让我们先给出这个简单代码的结论:
演示函数每次运行的时候,我们称之为每次渲染,每个渲染函数都有自己独立的和。当调用代码进行渲染时,每个渲染将在其自己的渲染范围内获得总和。
当然,这不是人类。我们继续吧。
本质上,这里实现响应的原理是完全不同的。我们都知道它是在。当响应值被修改时,会触发相应的trap函数,从而触发更新操作,更新集合对应的模板。
这里只是渲染函数中定义的一个数字。没什么,...它只是代表一个数字。
当我们第一次调用一个函数时,我们给它一个初始值。当我们点击按钮调用时,我们将再次渲染组件(运行演示函数)。此时,新函数的内部值为,然后用内部值再次调用函数进行页面渲染。以此类推,就像下面的代码一样:
每次我们更新状态时,(修改值)。该组件将被重新渲染,每次渲染可以获得一个独立的状态。这个状态值独立于每个渲染函数中的一个常数,它的作用只是渲染输出并在其中插入数字。
你可能想知道每次我们调用函数时,它的值是从哪里来的。当我们调用来修改其值时,新值由提供。会用新的值重新运行函数来再次渲染,以保证渲染和输出是一致的。
这里有一个关键点。任何渲染周期(函数调用)的值(直观的说是值)都不会随时间变化,因为每次调用渲染函数中的值都是常数(在各自渲染函数的范围内)。
渲染输出发生变化是因为组件函数被反复调用,而每次调用导致的渲染函数中包含的值在函数内是相互独立的。
这就是为什么我们在书中得到的仍然是最新的。由于封闭性,当我们点击时,我们得到当前渲染函数的内部值。记住每个渲染的和是相互独立的(因为是各自函数范围内的变量),每个独立渲染函数的和是常数。
每一个改变都导致功能组件被重新执行,从而每一个渲染功能都是独立且固定的。
这里注意固定和独立的关键词。Fixed表示当函数开始执行时,这个时间的值已经确定。(特别注意上面的访问是固定的,是由于封闭而确定的)。独立是指函数每次运行都在自己独立的范围内。
上面我们谈到了和声在不同渲染中的独立性,这就引出了我们的主角。日常生活中主要有两个作用。下面说说刚才遇到的问题,以及如何利用它们来解决。
我们之前学过,每个渲染都是相互独立的,所以很自然的我们就想到了如何在每个渲染之间产生一种关系。这时,他显示了他的作用。
让我们来看看返回值类型的定义:
可以看出,返回值是一个包含属性类型作为范例的值。
它和直接在中定义一个的区别在于。
将维护对所有返回值的唯一引用。因为pairs的所有赋值和值都得到最终状态,所以不会因为条件不同而产生不同的隔离。
简单来说,你可以把的返回值想象成一个全局变量。
让我们重新编写这个演示,看看:
按照前面的步骤,此时我们可以看到弹出的值是最新的值。而不是范围隔离的值。
当然,需要注意的是,修改返回值不会导致执行函数重新呈现。demo中的页面渲染不是因为修改了值,而是因为我们同时修改了中的,造成了页面渲染。
更改的值不会导致页面重新呈现,这可以做很多事情。例如,您可以查询页面是首次呈现还是更新。
综上所述,返回值的改变不会引起页面更新。而且,类似于中的全局变量,不同程度上没有作用域隔离机制。这是和这两个的主要区别。从...获取DOM
当然,与在以下位置获取DOM节点相比,这也是一种常见的用法:
接下来,您只需要传递来获取节点。从...获取DOM
说到上面,你已经可以知道了,没错,还有一个用途就是通过它来获取页面上的元素。
通过创建变量()保存。通过将属性添加到。页面挂载后,可以通过传递获得相应节点的真实DOM元素。
对于上面的演示,我们可以总结出一些特点。
我们可以把返回值看作一个组件中的全局共享变量,它将在呈现中共享相同的值。它们在不同程度上相对独立于内部范围值。
同时需要额外注意的是,返回值的改变不会导致组件被重新创建,这一点也不同于。
当然,当我们想要得到相应的实元素时,这样做也可以得到相应的元素。
网友评论