gpt4 book ai didi

svelte - 试图理解为什么更改变量会重新触发不相关变量的 react 性语句

转载 作者:行者123 更新时间:2023-12-05 03:19:34 24 4
gpt4 key购买 nike

上下文

这是我的上下文的简化版本:

context我有一个组件

  • 从服务器获取项目集合 -> 书签 [{title, url}, ...]
  • 在响应式语句中,通过添加具有 url 域名的新属性来从 bookmarks 填充新集合:`xbookmarks = [{title, url, domain}, ...]
  • 可以按域过滤书签,方法是显示一个复选框列表,每个域一个:
    • 这是通过声明一个 filter: {domains: {domain:true|false, ...}} 变量来实现的
    • filter.domains 映射通过遍历 xbookmarks 并将所有域设置为 true
    • 在响应式语句中填充
    • 最后,通过使用 filter
    • 过滤 xbookmarks,在 react 语句中计算出一个 filterdBookmarks 变量
  • 显示过滤后的书签

我尝试过的

这是伪 javascript 中的流程:

let bookmarks=[]

let xbookmarks=[]
$: xbookmarks = bookmarks.map(b=>{...b, domain: computeDomain(b)})

let filter = {domains: {}}
$: filter.domains=extractDomains(xbookmarks)

let filterdBookmarks=[]
$: filterBookmarks = xbookmarks.filter(using filter)

这是带有上述完整代码的 svelte REPL 的链接:https://svelte.dev/repl/d07ffc88e4a34cb797d2ceb6ba0ec6a4?version=3.49.0

问题

当我尝试取消选中其中一个域复选框时:

预期行为:

filter 已更改 => 触发依赖变量的重新计算,即 filterdBookmarks

实际行为:

filter 已更改 => Svelte 重新计算 xbookmarks,然后是 filter.domains,这会将其重置为所有正在检查的域,然后是 过滤书签

我不明白为什么 Svelte 认为 xbookmarks 依赖于 filter

当我查看 Svelte 生成的 JS 代码时,这不应该发生:

dependency graph

如上图所示,生成的代码符合我对依赖项的直觉:

  1. xbookmarksbookmarks 改变时重新计算
  2. filter.domainsxbookmarks 更改时重新计算
  3. filteredBookmarksxbookmarks 的任何一个 filter 改变时重新计算

P.S.:我刚刚开始学习和使用 Svelte

最佳答案

这可能是一个错误。 input_change_handler 使太多变量无效。

这在 v.3.2.0 中有效,另见 this related questionissue opened for it .

关于svelte - 试图理解为什么更改变量会重新触发不相关变量的 react 性语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73432013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com