Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Sapper在点击链接时没有重新加载数据_Javascript_Node.js_Svelte_Sapper - Fatal编程技术网

Javascript Sapper在点击链接时没有重新加载数据

Javascript Sapper在点击链接时没有重新加载数据,javascript,node.js,svelte,sapper,Javascript,Node.js,Svelte,Sapper,我正在使用sapper构建一个站点,并从API请求数据。到目前为止,它一直工作顺利 当我从site.com/title/id1转到site.com/title/id2时,在我点击手动刷新之前,不会加载新信息。有什么想法吗 import { stores, goto } from "@sapper/app"; import Card from "../_titlecard.svelte"; const { page } = stores(); const

我正在使用sapper构建一个站点,并从API请求数据。到目前为止,它一直工作顺利

当我从site.com/title/id1转到site.com/title/id2时,在我点击手动刷新之前,不会加载新信息。有什么想法吗

import { stores, goto } from "@sapper/app";
import Card from "../_titlecard.svelte";

const { page } = stores();
const { slug } = $page.params;

import { onMount } from "svelte";
let looper = [];
let artistName = "";
let titleName = "";
let dvdCover = "";
let titleCover = "";
let genre = "";
let tracks = [];
onMount(async () => {
  const res = await fetch(`https://.com/api/title/${slug}`);

  const data = await res.json();

  artistName = data.artistName;
  titleName = data.name;
  dvdCover = data.graphics.dvd;
  titleCover = data.graphics.landscape;
  genre = data.genre;
  tracks = data.tracks.length;

  const res2 = await fetch(`https://.com/api/artists/all`);
  const data2 = await res2.json();

  let moreTitles = [];
  const more = data2.map((x) => {
    if (x.titles.length > 0 && x.genre === genre) {
      looper.push(x.titles[0]);

      looper = moreTitles;
    }
  });
});
然后我在html中有了这个

{#each looper.slice(0, 4) as item, i} 
  <Card imgurl={item.graphics.dvd} concert={item.name} id={item.id} />
{/each}
{#每个looper.slice(0,4)作为项,i}
{/每个}

如果导航导致使用相同的页面组件,则页面组件不会卸载并再次装载,因此您的
onMount
将仅使用第一个
id
运行一次

您可以使用确保每次更改
$page.params.slug
时都运行所需的代码

示例

从“@sapper/app”导入{stores,goto}”;
从“./_titlecard.svelte”导入卡片;
常量{page}=stores();
设looper=[];
让艺人姓名=”;
让titleName=“”;
“让我们覆盖”;
让titleCover=“”;
让体裁=”;
让轨道=[];
$:(异步()=>{
const{slug}=$page.params;
const res=等待取数(`https://.com/api/title/${slug}`);
const data=wait res.json();
artistName=data.artistName;
titleName=data.name;
dvdcolver=data.graphics.dvd;
titleCover=data.graphics.landscape;
流派=data.genre;
轨迹=data.tracks.length;
const res2=等待提取(`https://.com/api/artists/all`);
const data2=wait res2.json();
让更多标题=[];
数据2.forEach((x)=>{
如果(x.titles.length>0&&x.genre==流派){
morethiles.push(x.titles[0]);
}
});
活套=更多标题;
})();

现在它正在重新加载数据,这很好,但会收到如下警告:UnhandledPromisejectionWarning:Unhandled promise rejection。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。(拒绝id:3)@blytung这太令人沮丧了。这可能是由于许多不同的原因。您可以将整个被动语句体包装在try/catch中,并记录错误以查看发生了什么<代码>尝试{/*被动语句体*/}捕获(错误){console.log(错误);}