在 Svelte 中传递道具

2024-02-24

我正在尝试使用 Svelte、Svelte Routing 和 Firestore 实现一个相当标准的博客应用程序,但我认为我误解了 props 在组件之间传递方式的基本部分。

我的初始代码基于 Fireship.io 上的优秀教程 - 该教程按照教程工作:https://fireship.io/lessons/svelte-v3-overview-firebase/ https://fireship.io/lessons/svelte-v3-overview-firebase/

从那里我添加了 Svelte Routing -https://github.com/EmilTholin/svelte-routing https://github.com/EmilTholin/svelte-routing- 我正在尝试添加一条查看路线。

App.svelte的相关部分:

<Router url="{url}">
    <Navbar user="{user}" />

    <div>
        <Route path="posts/:id" component="{Post}" />
        <Route path="posts/add" component="{PostForm}" />
        <Route path="posts" component="{Blog}" />
        <Route path="/" component="{Home}" />
    </div>

</Router>

在我的博客组件中,我使用一个名为 PostTeaser 的组件,在其中传递一个到帖子视图页面的链接。

博客组件:

<div class="posts">
    {#each posts as post}
      <PostTeaser post="{post}" />
    {/each}
</div>

PostTeaser 组件:

<div class="post-teaser">
   <h2 class="title is-3"><Link to="posts/{ post.id }" {post}>{ post.title }</Link></h2>
   <div class="post-teaser-content">{ post.content }</div>
</div>

我在浏览器中收到警告:<Link> was created with unknown prop 'post'

尽管预告片确实出现在屏幕上并包含正确的信息。

当我点击帖子(即帖子组件)时,我的数据未定义。

我正在放置export let post;在我每个组件的脚本标签中。

我应该使用“存储”来存储我的数据吗?目前,我正在 BlogComponent 中获取数据并将其沿线传递。这似乎是不正确的。任何帮助不胜感激。

请参阅此处查看更完整的示例:https://codesandbox.io/s/romantic-cannon-ri8lo https://codesandbox.io/s/romantic-cannon-ri8lo


使用svelte-routing,你不需要从<Link>组件,您可以从<Route>隐式组件。你哪里有这个...

<Route path="posts/:id" component="{Post}" />

...你告诉路由器如果 URL 与模式匹配/posts/:id,它应该渲染Post组件,传递给它一个id与 URL 的该部分匹配的 prop。

The Post组件负责根据该数据获取其数据。所以在这种情况下,您可以移动posts数组到一个单独的模块中,并更改Post.svelte因此:

<script>
  import posts from "./posts.js";

  export let id;
  $: post = posts.find(p => p.id == id);
</script>

<div class="post">
  <h1>{ post.title }</h1>
  <div class="post-content">{ post.content }</div>
</div>

(请注意,props 是字符串化的,因为它们源自href,所以我们需要一个==比较而不是===.)

这是一个工作叉子。 https://codesandbox.io/s/clever-bird-26xkx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Svelte 中传递道具 的相关文章

随机推荐

  • jQuery 方法:.submit() 与 .trigger('submit') 之间的区别

    jQuery 允许通过以下任一方式以编程方式触发表单提交 js form class hook submit js form class hook trigger submit 注 我的理解是 trigger submit is to su
  • C# == 运算符详细做什么?

    在 C 中 当您在两个对象上使用 运算符进行比较时 后台到底发生了什么 它只是比较地址吗 或者是类似 Equals 或 CompareTo 的东西吗 PS java中的 运算符怎么样 它的行为相同吗 据我所知 它按值 相等 比较值类型 它通
  • Clojure:如何在运行时找出函数的数量?

    给定一个函数对象或名称 我如何确定它的数量 就像是 arity func name 我希望有办法 因为 arity 在 Clojure 中非常重要 函数的元数存储在变量的元数据中 arglists meta str x x ys 这要求该函
  • Lisp 中的函数名可以有别名吗?

    就像包裹一样 我使用Emacs 也许 它可以提供某种解决方案 例如 defun the very very long but good name 稍后在代码中没有用处 但名字就像Fn 15或者第一个字母缩写也没有用 是否可以使用类似于包的别
  • Java 静态方法上的线程锁

    根据我对 Java 类的了解 非静态同步方法 在特定对象上获取锁 静态同步方法 在类上获取锁 我对此有点困惑 因为我们可以通过类名或对象名调用静态方法 请假设我的类有 4 个方法都是同步的 2 个方法是静态的 2 个方法不是静态的 如果我创
  • Jquery 在 Href 上创建双击事件

    伙计们是否可以使用 jquery 为 a href 创建双击事件 双击锚点执行操作的问题是 页面将在第一次单击时重定向 从而阻止双击及时响应 如果您想 拦截 点击事件 以便双击事件有机会在页面重定向之前触发 那么您可能必须设置点击超时 如下
  • 如何在 Django 中获取用户 IP 地址?

    如何在 Django 中获取用户的 IP 我有这样的看法 Create your views from django contrib gis utils import GeoIP from django template import Re
  • 如何在 Aurelia 中“继承”可绑定属性?

    我正在使用 TypeScript 开发 Aurelia 应用程序 在此应用程序中 我定义了一组自定义元素 每个元素共享一组可绑定属性 这些属性被转换为 css 设置 如以下简化示例所示 import computedFrom bindabl
  • 在 Azure Linux VM 中,什么仍然存在?什么磁盘收费?

    我在 Microsoft 的 Azure 中创建了一个小型 Linux VM 我还创建了一个 20GB BLOB 并将其安装为文件系统 在我的虚拟机上 我看到以下内容 根文件系统 约28GB 启动文件系统 约500MB 我的 20GB 文件
  • iphone AVEditDemo 或任何视频处理示例

    我正在尝试以某种方式处理视频 剪切和合并视频 录制屏幕并从该录制内容中制作视频 我也在互联网和 stackoverflow 上查找 看到苹果有一个名为 AVEditDemo 的代码示例 但我永远找不到它 如果有人有这个例子并愿意与我分享 或
  • 微软 Roslyn 与 CodeDom

    From a 新闻稿 http www infoworld com d application development microsofts roslyn reinventing the compiler we know it 176671
  • Laravel 5.5 将迁移与生产数据库合并

    希望我能很好地解释这一点 我有一个 Laravel 应用程序 已经投入生产了一分钟 所以 我有一堆包含很多更改的迁移文件 我想合并这些迁移文件而不丢失数据库 我的方式think这会起作用 将所有生产表迁移到所需状态 将所有迁移文件合并为所需
  • 如何列出 mongo shell 中的所有数据库?

    我知道怎么做列出特定数据库中的所有集合 https stackoverflow com questions 8866041 how to list all collections in the mongo shell 但是如何在 Mongo
  • mysqld_safe UNIX 套接字文件的目录“/var/run/mysqld”不存在

    使用 mysqld safe 启动 mysql 服务器 5 7 17 时 出现以下错误 2017 02 10T17 05 44 870970Z mysqld safe Logging to var log mysql error log 2
  • 从 XMLHttpRequest 对象中删除 cookie

    我正在使用 jquery 进行 ajax 调用 例如 ajax url path to webservice asmx beforeSend function xmlHTTPRequest modify headers here remov
  • 分页计算算法

    我正在尝试计算分页 var pagination total result length per page itemsPerPage required current page currentPage required last page
  • 用回形针圆角

    如何用回形针创建圆角 我找到了这个解决方案 它创建了使用convert options用回形针实现圆角 http loo no 2009 08 09 rounded corners with paperclip 但它不适用于 Rails 3
  • 跨浏览器事件对象规范化?

    我正在寻找有关事件对象的事件规范化的良好资源 我想自己做 但我总觉得我会错过一些东西 这是我到目前为止所掌握的 如果我错过了什么 请告诉我 var eFix function e e e window event e target e ta
  • Android,Cometd:Cometd 发送备用消息

    我正在开发一个 Android 应用程序 在其中实现聊天功能 考虑到 Cometd 的使用 聊天速度相当快 但由于某种原因 Cometd 正在发送备用消息 如果它发送message 1 则不发送message 2 然后发送3 依此类推 这是
  • 在 Svelte 中传递道具

    我正在尝试使用 Svelte Svelte Routing 和 Firestore 实现一个相当标准的博客应用程序 但我认为我误解了 props 在组件之间传递方式的基本部分 我的初始代码基于 Fireship io 上的优秀教程 该教程按