问题标签 [reactive-variable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2979 浏览

svelte - 在 Svelte JS 中,如果某个变量只是打印但不参与给出值,那么反应变量如何工作?

https://svelte.dev/repl/f8db4771ba794c658d7c25a6e72d1b46?version=3.18.1中的代码

有两个“反应变量”:

如果值发生name变化,那么nameUpperCase也会发生变化。这很容易。

但是对于第二部分,似乎当nameor的值发生变化时,就会评估age该行。if如果从age中删除console.log(),如https://svelte.dev/repl/68c2cdea2bfd462caa5ac5519fb8b99d?version=3.18.1,那么是否age更改都没关系。该if行不被评估。

但是age从不参与为if语句生成任何最终值。它只是被打印出来,并且console.log总是返回undefined。那么规则是什么?不知何故,Svelte“神奇地”收集 之后的所有变量$:,然后如果它们中的任何一个发生变化,则执行$:?之后的行 所以即使变量不参与形成一些最终值,它仍然被考虑吗?

0 投票
1 回答
68 浏览

meteor - 提供反应数据源

背景:我目前的 Meteor-React 项目是一个教学应用程序,教师可以远程观察学习者在做什么。学习者可以使用许多不同的视图,因此我需要将数据共享方面与视图本身分开。相同的视图将显示在教师的设备上,显示由学生的动作控制。

问题: * 我使用的技术是声音吗?* 当组件的输入没有改变时,如何防止组件被重新渲染?

详细信息:我创建了一个简单的原型(见下文)。这使用 Source 实例(在应用程序本身中将通过 MongoDB 集合更新)为视图组件提供反应性数据。在我的原型中,我只是生成随机数据。

我有两个惊喜。

一:我发现如果我.get()在源中调用 ReactiveVar,这足以触发 Tracker 对象读取新值,即使我返回一个完全非反应变量的值。正如所料,如果 ReactiveVar 的值没有改变,那么 Tracker 会忽略对非反应变量的任何改变。

二:Tracker获取的值转发给组件props`导致即使值不变也会s重新渲染。

代码:

示例控制台输出,带有注释:

回顾一下:我的计划是每次从学生那里收到新数据时,在我的 Source 实例中增加一个 ReactiveVar。但是,如果学生只是移动光标,那么我只希望显示学生光标的组件重新渲染,而不是整个视图。

对于如何优雅地实现这一目标,我将不胜感激。

0 投票
1 回答
171 浏览

svelte - 为什么我不能在 svelte3 的脚本标签中访问“$:”又名反应变量?

我对苗条还很陌生,一周前就开始了……

我想知道我真的很喜欢它❤️❤️但我有问题☹️☹️

我正在尝试访问脚本标签中的 $: 变量,但出现错误Cannot access 'greeting' before initialization

我还尝试在使用它之前用let声明变量

但在这种情况下console.log输出undefined.

0 投票
1 回答
102 浏览

r - 插入新行时,反应值重置为 NA rhandsontable 闪亮

我有一个带有 rhandsontable 和一个信息框的 Shiny 应用程序,它根据初始预算 (1000) 和用户在 rhandsontable 中输入的值报告剩余预算。

剩余预算的值根据 W 列的值正确更新,但是,在插入新行时,值首先更改为 NA,然后根据输入的值重新计算。我希望剩余预算信息框的值保持不变,直到添加新值。在我的代码下面:

0 投票
0 回答
764 浏览

jestjs - 在测试中等待反应变量的正确方法是什么?

给定一个反应变量

注销挂钩简化为:

还有一个调用钩子的组件:

当我为组件编写测试时,我被迫await waitFor(() => {});在测试中使用。

但是测试库文档提到

使用空回调被认为是不好的做法,因为它会使测试更加脆弱。

我真的很想做:

但这给了我无数错误

测试中 ProfileHeader 的更新未包含在 act(...) 中。

我不明白。

我的测试等待反应变量改变的正确方法是什么?

0 投票
3 回答
1636 浏览

reactjs - Apollo 客户端反应变量 - 更新值后不触发重新渲染

我正在尝试使用反应变量:

我的缓存文件:

文件 A(更新值):

文件 B(读取值并在文件 A 中更新值后重新渲染):

文件 A 中的更新操作不会触发文件 B 的重新渲染

0 投票
1 回答
306 浏览

apollo-client - 刷新页面后,Apollo Client 反应变量状态未保存在缓存中

我在我的 React 应用程序上运行 Apollo 客户端,并尝试使用useReactiveVar. 当我第一次设置变量时,一切都在虚拟函数中工作,但是在刷新应用程序后它会重置状态。

这是我的cache.js

这是读取变量并根据其状态呈现不同元素的组件:

当我调用时,这个组件会被正确地重新渲染handleCreateOrGetUser,但是,当我刷新页面时,它会重置isLoggedInVar变量。

在这里使用反应变量来持久化缓存的正确方法是什么?

0 投票
0 回答
397 浏览

reactjs - useState 钩子和 useReactiveVar(反应变量)钩子有什么区别?

基本上以下两段代码有什么区别?我们可以说 useReactiveVar 是一种具有重新渲染功能的 useRef 吗?

  1. useState(这会记录“ iAmAwesome ”吗?)
  1. useReactiveVar(这会记录“ iAmAwesome youAreAwesome ”吗?)
0 投票
0 回答
15 浏览

r - 反应值不能转换为常规列表

我需要有一个循环,我需要在其中创建一个列表,然后使用它rbindlist来创建一个data.frameor data.table,将其传递给FunctionC. 但是下面的代码不起作用。我尝试了许多修改无济于事。

0 投票
1 回答
131 浏览

svelte - Preventing Svelte component parameter reactivity

I've written a modal component in Svelte that has multiple exported variables for controlling behavior. The values of these variables can vary from invocation to invocation, but once a modal is showing, the only value that can be expected to change is that of isOpen. This suggests that isOpen is the only variable requiring reactivity, but if my understanding is correct, the presence of other variables in the HTML will cause Svelte to unnecessarily generate reactive code for all those variables too, unnecessarily fattening the code base.

My question is, what strategies are available for preventing reactive code from being generated for component parameters when it is not needed?

In the following, message will not change while the modal is displayed, so it seems that only isOpen need be reactive. The Svelte compiler cannot know this, though, so I have to explicitly do something that inhibits this reactive behavior.

The only technique I'm aware of is to move the variable out into a function, as follows:

Is there a more succinct or more conventional way to accomplish this? For a technology so well thought out as Svelte, I find myself believing that there has to be a less clunky way to do this. A person who comes along to maintain code after me might see this as unnecessarily verbose and eliminate the indirection, unwittingly fattening up the code base (should they do this wholesale). It seems like there ought to be something more explicit.

Or perhaps there is a way to require that all reactive variables be explicitly designated, such as with a preceding $:?