【问题标题】:Get array from function从函数中获取数组
【发布时间】:2021-03-22 10:28:30
【问题描述】:

我试图让我可以在函数内部登录的数组在外部使用。我正在使用工兵。已经被这个问题困扰了好几个小时了,是时候联系社区了!

let dvd = [];
let artistName = [];
let searchString = [];

onMount(async () => {
    const res = await fetch(`artists/all`);
    const data = await res.json();

    const newdata = data.map(x => {
        if (x.titles.length > 0) {
            dvd.push(x.titles[0].graphics.dvd)
            artistName.push(x.titles[0])
        }
    })
})

let searchTerm = '';
    
async function getData() {
    searchString.push(artistName.filter(d => d.artistName === searchTerm));
    console.log(searchString)
}

【问题讨论】:

  • 你指的是异步函数吗?
  • 是的,异步 getdata。
  • var result=await getData()???
  • 这个组件的 HTML 部分是什么?我不明白getData 是如何被调用的,也不知道searchString 到底应该是什么。我认为您问题的最大部分是在数组上调用 push 不会触发 svelte'e 重新编译。您应该使用等式语句重置数组,例如 searchString = artistName.filter(...)
  • 当我这样做时,我实际上得到了更多,因为我想要它,这很棒。但我仍然无法在函数之外得到它。 {searchString}

标签: javascript node.js svelte sapper


【解决方案1】:

如果我正确理解了这个问题,您的问题是 searchString 的更新值未应用于 DOM。这是由于 Svelte 的反应性如何工作。来自tutorial

因为 Svelte 的响应是由赋值触发的,所以使用 push 和 splice 等数组方法不会自动导致更新。

您应该更新getData 以分配给searchString 而不是调用push

async function getData() {
    searchString = [...searchString, artistName.filter(d => d.artistName === searchTerm)];
    console.log(searchString)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2021-06-07
    相关资源
    最近更新 更多