- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 sveltekit 的新手。
我有一个页面 [symbol].svelte。
http://localhost:3000/stocks/mnr-pc = host/stocks/[symbol]
当 URL 的符号发生变化时,它应该从 API 获取该符号的数据并将数据作为 props 传递给子组件。
要更改别名/符号,我在页面顶部有一个搜索框。我搜索一个符号,当我点击搜索框中的任何符号时,我更改了 url。
例如:如果我选择符号“tsla”,我会将 URL 更改为 http://localhost:3000/stocks/tsla。
问题是,第一次更改URL时,它从API中获取数据,并通过子组件显示数据。但在那之后,如果我再次搜索一个新的符号并点击它,虽然路由器改变了,但 UI 上的数据仍然保持不变。
[symbol].svelte 这个文件在 routes/stocks 文件夹中
<script context="module">
import StockSymbol from '$lib/stocks/index.svelte';
import data from '../../../static/symbols.json';
let props;
let symbolName;
export const hydrate = true
export async function load({ page, fetch }) {
symbolName = page.params.symbol;
let symbols = data.symbols;
let symbolFound = symbols.find(s => s.s.toLowerCase() === page.params.symbol.toLowerCase());
if (!symbolFound) {
return {
status: 302,
redirect: '/404'
}
}
const url = `APIHOST/${symbolName}`;
const res = await fetch(url);
let stock = await res.json();
stock = stock.data.attributes;
props = {
stock
};
return {
props: {
stock
}
}
}
</script>
<svelte:head>
<title>Stock: { symbolName || ''}</title>
</svelte:head>
<svelte:component this={StockSymbol} {...props}/>
search.svelte
<script context="module">
import AutoComplete from "simple-svelte-autocomplete";
import data from '../../../static/symbols.json';
import { goto, prefetch } from '$app/navigation';
var options = data;
let selectedOption;
const handleOnChange = () => {
console.log(selectedOption);
if (selectedOption) {
goto(`/stocks/${selectedOption.s.toLowerCase()}`, {replaceState: true});
}
}
</script>
<div class="min-w-0 hidden sm:block flex-1 md:px-8 lg:px-48 xl:col-span-6">
<div class="flex items-center px-6 py-4 md:max-w-3xl md:mx-auto lg:max-w-none lg:mx-0 xl:px-0">
<div class="w-full">
<label for="search" class="sr-only">Search</label>
<div class="relative">
<div class="z-20 pointer-events-none absolute inset-y-1 left-0 pl-3 flex items-center">
<svg class="h-5 w-5 text-gray-400" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
<path fill-rule="evenodd" d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z" clip-rule="evenodd"></path>
</svg>
</div>
<AutoComplete
onChange={handleOnChange}
inputId="search"
placeholder="Search"
className="w-full text-md"
inputClassName="block px-10 py-2 w-full rounded-md border border-gray-300 text-sm placeholder-gray-500 focus:outline-none focus:text-gray-900 focus:placeholder-gray-400 focus:ring-1 focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"
items={data.symbols.map(o => o)}
labelFunction={o => o.s + '. ' + o.n}
bind:selectedItem={selectedOption}
hideArrow={true}
showClear={true}
showLoadingIndicator={true}
noResultsText="No Results Found"
maxItemsToShowInList="10"
localFiltering=false
/>
</div>
</div>
</div>
</div>
svelte.config.js
import vercel from '@sveltejs/adapter-vercel';
/** @type {import('@sveltejs/kit').Config} */
const config = {
kit: {
target: '#app',
adapter: vercel(),
hydrate: true,
vite: {
build: {
minify: true,
brotliSize: true,
sourcemap: true,
}
}
}
};
export default config;
请帮帮我。谢谢。
最佳答案
您在模块脚本中声明 props
并在 load
函数中分配它。这只适用于第一次。 slim explicitely states in its docs模块脚本中的变量更新不是 react 性的。解决的方法是显式声明 Prop (首选方式)或使用 $$restProps
:
<script context="module">
//...
// Do NOT declare "let props" here
export async function load({ page, fetch }) {
// ..
return {
props: {
stock // <- handed to the instance script
}
}
}
</script>
<script>
export let stock; // <- this gets the stock from "return { props: { stock } }" above
</script>
..
<svelte:component this={StockSymbol} {stock}/>
<!-- or (then you don't need the "export let stock" abive) -->
<svelte:component this={StockSymbol} {...$$restProps}/>
关于javascript - sveltekit:尽管 URL 已更改,但组件未被第二次呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68921960/
我使用 import { MongoClient } from 'mongodb'; 导入了 mongodb,(mongodb 的版本是 4.0.0-beta.5)它在 svelte-kit dev
我正在尝试以通配符方式导入目录中图像的所有 url,有两个可能的扩展名: import urls from "../static/images/**/*.{png,svg}"; 目前该目录下有3个文件
我有一个 sveltekit 应用程序,我想检查用户是否有来自 cookie 的 accesstoken。我可以通过 event.request.headers.get('cookie'); 访问它并
注意:我已将我的 Sapper 应用程序迁移到 SvelteKit(下面的更新 3),因此现在正在寻找 SvelteKit 的解决方案。 我有多个使用 Sapper 构建的 MFE(微前端),它们位于
我最近试图在Vercel上部署一个SvelteKit项目库,但由于Vercel构建应用程序的方式,我编写的传递实用程序类并以编程方式调用TailWind的API端点无法工作。它在我的本地环境中运行得很
我最近试图在Vercel上部署一个SvelteKit项目库,但由于Vercel构建应用程序的方式,我编写的传递实用程序类并以编程方式调用TailWind的API端点无法工作。它在我的本地环境中运行得很
有人对 SvelteKit 有同样的问题吗?为什么它会在每次页面请求时加载图标? see attachment 最佳答案 我的网站图标没有这个问题。我通过 在最顶部的 __layout.svelte
我有一个计算和显示统计数据的 SvelteKit 着陆页组件。因为从数据库中提取数字是一项繁重的工作,而且这些信息只更新大约一个小时左右,所以我想缓存结果,以便为所有访问者快速提供登陆页面。在路由 l
我对 SvelteKit 和 Supabase 都比较陌生,并且自己做了一些实验,但我想知道使用这两种技术实现用户身份验证的最佳方式是什么。 我目前在我的 __layout.svelte 文件中有以下
我正在尝试使用 sveltekit 创建一个导航栏。到目前为止,我所有的链接(哈希路由)都可以在单击时设置样式。但是,在多次单击“主页”路由后,它停止导致页面加载,这导致我的 $page 订阅无法更新
在 sveltekit 中,我有一个静态文件夹,其中有 .zip 文件,为了在本地获取它,我做了类似的事情: const res = await fetch("/static/makeup.zip")
SvelteKit 是否可以获取当前页面的协议(protocol)(HTTP 或 HTTPS)? 类似于: import {page} from '$app/stores'; console.log(
我在 Svelte 组件中有一个链接。此链接的目标由保留代理服务器处理,因此链接目标不是 Svelte 应用程序的一部分,即使它与 Svelte 应用程序共享相同的 URL 路径。 如果我单击链接,S
我有一个页面(动态路由),我从加载函数中的 API 获取数据。在获取数据之前显示加载指示器的正确方法是什么。我尝试过的事情: 使用等待 block 。我返回一个获取函数的 promise ,然后在正常
我想试用新的 SvelteKit 替代 Sapper,但我无法启动开发服务器。 我跑了: npm init svelte@next npm install npm run dev -- --open
我对 svelte 尤其是 SvelteKit 还很陌生。目前,我正在开展 2 个项目。 第一个是我使用的 SPA svelte-spa-router管理不同的状态并提供前后导航的能力,就像我们在老式
如何在 sveltekit 的端点中访问 session ?我试过这个但没有运气: import { get } from 'svelte/store'; import { getStores}
我一直在开发一个 sveltekit 应用程序,最近我的主导航菜单遇到了问题。当应用程序加载或刷新时,与当前 URL 对应的当前菜单项未设置为事件。 (即菜单项“主页”的 URL 为“/”)我很难在网
我正在尝试将 Strapi 后端连接到 SvelteKit 前端,并坚持如何保持用户登录状态,以便一切都不会在刷新或导航到新页面时重置。我试过: 将 Strapi 发布的 jwt 和用户对象存储在 l
在 layout.server.ts 中我尝试 import type { LayoutServerLoad } from './$types'; 但是找不到类型: '"./$types"' has
我是一名优秀的程序员,十分优秀!