[svelte]组件怎么进行状态共享

前面提到的svelte stores是一种用于管理应用程序状态的机制,它可以在不同组件之间共享状态,但就可能会有这样子的疑问,难道一定要通过stores来传递属性的状态吗


Props(属性)

最简单的方法是通过将状态作为属性传递给子组件来共享状态。父组件可以将状态作为 prop 传递给子组件,子组件可以读取和修改这些 prop。这种方法适用于简单的状态共享场景。

 parentCompoent.svelte

<script>import ChildComponent from './ChildComponent.svelte';let parentState = 'Hello from Parent';
</script><ChildComponent {childState={parentState}} />

ChildComponent.svelte

<script>export let childState;
</script><p>{childState}</p>

这种方法就是最简单的值传递,如果组件层次较深或者状态需要在多个组件之间共享,就会很麻烦

Context(上下文)

 Svelte 中的 getContextsetContext 可以用于在组件树中传递上下文信息。通过在祖先组件中设置上下文,所有后代组件都可以访问该上下文。这种方法适用于跨越多层级组件的状态共享。

App.svelte

<script>import { createContext } from 'svelte';export const AppContext = createContext();let sharedState = 'Hello from Context';// 在此处将共享状态传递给子组件const context = { sharedState };
</script><AppContext.Provider value={context}><ChildComponent />
</AppContext.Provider>

 ChildComponent.svelte

<script>import { getContext } from 'svelte';import { AppContext } from './App.svelte';const { sharedState } = getContext(AppContext);
</script><p>{sharedState}</p>

创建上下文对象:React.createContext()   会返回一个包含Provider和Consumer的对象

提供数据:使用上下文对象的Provider组件来提供数据

                  通过value属性来传递需要共享的数据

消费数据:在需要访问共享数据的组件中,用Consumer或useContext钩子来获取上下文值

Stores(存储)

Svelte stores 是一种用于管理应用程序状态的机制,可以在不同的组件之间共享状态。你可以使用 writablereadablederived 等不同类型的 store 来管理不同的状态,并在需要时在组件之间共享这些状态。这种方法适用于更复杂的状态共享需求,例如全局状态管理或跨多个组件的状态共享。

[svelte]stores全局状态容器-CSDN博客

事件(Events)

 组件可以通过触发事件来向父组件通知状态的变化,父组件可以监听这些事件并相应地更新状态。这种方法适用于单向数据流的场景,其中父组件负责管理状态,而子组件负责通知状态的变化。

EventBus.js

// EventBus.js
import mitt from 'mitt';
export const eventBus = mitt();

 Compoent1.svelte

<!-- Component1.svelte -->
<script>import { eventBus } from './EventBus.js';const handleClick = () => {eventBus.emit('message', 'Hello from Component 1');};
</script><button on:click={handleClick}>Send Message</button>

Compoent2.svelte

<!-- Component2.svelte -->
<script>import { eventBus } from './EventBus.js';let message = '';eventBus.on('message', msg => {message = msg;});
</script><p>{message}</p>

mitt是第三方库,用来创建一个事件总线

Component1.svelte 组件中,当按钮被点击时,通过事件总线 eventBus 发送了一条消息

Component2.svelte 组件中,监听了事件总线 eventBus 上的 message 事件,并在事件触发时更新了组件的状态 message

这样,当 Component1.svelte 中的按钮被点击时,会触发 message 事件,Component2.svelte 中的状态 message 会被更新为接收到的消息,从而实现了在组件之间传递状态的功能。

全局变量: 如果状态需要在整个应用程序中共享,并且不需要在组件之间传递,你可以将状态保存在全局变量中。这种方法适用于全局性的状态共享需求,但要注意全局变量可能会导致状态管理变得不可预测和混乱。

 在JavaScript中有几种方式可以来定义全局变量

 1.直接声明在全局作用域下面

// 在全局作用域下声明全局变量
let globalVar = 'I am a global variable';

2.在window对象上定义属性

// 将变量挂载到 window 对象上
window.globalVar = 'I am a global variable';

3.使用var关键字声明

// 使用 var 声明全局变量
var globalVar = 'I am a global variable';

在模块化开发中,如果使用了 ES6 的模块系统(比如在 Node.js 中使用 CommonJS 或在浏览器中使用 ES6 的 import/export),那么每个模块都有自己的作用域,变量默认不会成为全局变量。如果你想在模块间共享变量,可以通过 export 导出变量,并在其他模块中使用 import 导入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/3384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OceanBase 分布式数据库【信创/国产化】- OceanBase 概述

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 概述前言OceanBase 数据更新架构高可用高兼容水平扩展低成本实时 HTAP安全可靠OceanBase 分布式数据库【信创/国产化】- OceanBase 概述 编辑 | 简简单单 Online zuozuo 地址 | https://blog.…

[C/C++] -- C++11相关内容

一&#xff1a;声明 auto: auto 是 C11 引入的一个关键字&#xff0c;用于自动推断变量的类型。通过使用 auto&#xff0c;编译器可以根据变量的初始化表达式推断其类型&#xff0c;从而减少代码中的重复冗长的类型声明。 简化模板声明&#xff1a; for(auto p vec.begin(…

Pandas 2.2 中文官方教程和指南(二十五·二)

新列 使用 DataFrame.map&#xff08;以前称为 applymap&#xff09;高效动态创建新列 In [53]: df pd.DataFrame({"AAA": [1, 2, 1, 3], "BBB": [1, 1, 2, 2], "CCC": [2, 1, 3, 1]})In [54]: df Out[54]: AAA BBB CCC 0 1 1 2 1…

用html写一个旋转菜单

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>旋转菜单</title><link relstylesheet href"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css"&…

【Nginx】(五) Nginx作为微服务API网关的配置与应用

在微服务架构中&#xff0c;API网关是一个至关重要的组件&#xff0c;它不仅负责路由请求到正确的服务&#xff0c;还提供负载均衡、认证授权、限流、监控和日志记录等功能。在本博客中&#xff0c;我们将探讨一个在线教育平台如何使用Nginx作为API网关来解决流量管理和安全问题…

Linux操作

一&#xff1a;各类操作快捷键 Ctrl c强制停止程序运行用于删除命令&#xff0c;执行出错时使用Ctrl d退出或者登出用于退出Linux账户 | 退出Linux自带的Python模式(命令框输入&#xff1a;python进入)history查看历史命令用于查看历史命令Ctrl r历史命令搜索进入后面在 内…

树莓派学习笔记--串口通信(配置硬件串口进行通信)

树莓派串口知识点 树莓派4b的外设一共包含两个串口&#xff1a;硬件串口&#xff08;/dev/ttyAMA0&#xff09;,mini串口&#xff08;/dev/ttyS0&#xff09; 硬件串口由硬件实现&#xff0c;有单独的波特率时钟源&#xff0c;性能高&#xff0c;可靠&#xff1b;而mini串口性能…

分享6款嵌入式常见的GUI,不要错过

大家好&#xff0c;我是知微&#xff01; 先来聊聊什么是GUI。图形用户界面&#xff08;Graphical User Interface&#xff0c;简称 GUI&#xff09;采用直观的图形方式展示&#xff0c;让用户与计算机或设备交流变得简单直观。不仅工作效率得到极大提升&#xff0c;用户体验也…

普通人也可以在抖音上开店卖货了,还有多少人不知道!

大家好&#xff0c;我是电商糖果 在抖音上开网店卖货最近几年特别火&#xff0c;我想只要是稍微了解电商创业的朋友都知道。 就当你没有创业做电商的想法&#xff0c;你只要有网购的习惯&#xff0c;就会发现抖音上购买商品非常的方便。 而且身边的同事&#xff0c;朋友也都…

全新G级越野车家族领衔 梅赛德斯-奔驰携强劲实力阵容和前瞻数字科技亮相2024北京车展

全新纯电G级越野车、G 500和AMG G 63亮相&#xff0c;油电双雄带来G级越野车的多元选择CLA级概念车携MMA平台及MB.OS构建奔驰电动化、数字化的未来&#xff0c;定义新生代电动风潮全新AMG GT 63 S E PERFORMANCE车展亮相&#xff0c;以F1技术打造“史上最快AMG量产车”“迈巴赫…

Vue2 —— 学习(十)

目录 一、vue-resource 库 二、插槽 &#xff08;一&#xff09;默认插槽 &#xff08;二&#xff09;具名插槽 &#xff08;三&#xff09;作用域插槽 三、vuex &#xff08;一&#xff09;介绍 &#xff08;二&#xff09;多组件共享数据 1.通过全局事件总线实现 2…

【virtuoso】 PDK

什么是PDK&#xff1f; PDK( Process Design Kit )&#xff0c;工程设计数据包&#xff0c;是芯片厂家foundary提供给IC设计公司的有关制造工艺的模型和EDA工具支持。是连接IC制造公司&#xff0c;IC设计公司的桥梁。 PDK包含内容&#xff1a; 器件模型 SPICE模型模型 与 测量误…

Nodejs--异步编程

异步编程 函数式编程 高阶函数 在通常的语言中&#xff0c;函数的参数只接受基本的数据类型或者是对象引用&#xff0c;返回值只能是基本数据类型和对象引用。 function foo(x) {return x }高阶函数是把函数作为参数&#xff0c;将函数作为返回值的函数 function foo(x) {…

最好的电脑监控软件,监控员工的软件哪个好用

经过对百度AI的询问&#xff0c;最好的电脑监控软件是安企神&#xff0c;因为它排名第一位。 经过对AI的详细询问&#xff0c;它给出了选择安企神作为电脑监控软件的十个理&#xff1a; 获取试用版找客服 1.全面的监控功能 安企神软件提供了屏幕监控、键盘记录、文件操作记录…

【Harmony3.1/4.0】笔记二-列表

概述 列表是一种复杂的容器&#xff0c;当列表项达到一定数量&#xff0c;内容超过屏幕大小时&#xff0c;可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集&#xff0c;例如图片和文本。在列表中显示数据集合是许多应用程序中的常见要求&#xff08;如通讯录、…

抗D盾是什么,为什么游戏被攻击了需要抗D盾

游戏行业DDoS攻击的主要原因是因为游戏产品生命周期偏短&#xff0c;而DDoS供给成本又不高&#xff0c;只要发起攻击&#xff0c;企业为确保游戏稳定运营而不得不快速做出让步&#xff0c;致使敲诈勒索的成功率相对更高。在遭受DDoS攻击后&#xff0c;游戏公司的日损失甚至多达…

git远程分支强制覆盖本地分支

目录 第一章、问题1.1&#xff09;报错提示&#xff1a;没有为分支主机或分支配置被跟踪的分支1.2&#xff09;报错分析与解决 第二章、2.1&#xff09;本地误删代码后想要git pull拉取覆盖&#xff1a;失败2.2&#xff09;报错分析和解决 友情提醒: 先看文章目录&#xff0c;…

4.24总结

对部分代码进行了修改&#xff0c;将一些代码封装成方法&#xff0c;实现了头像功能&#xff0c;通过FileInputStream将本地的图片写入&#xff0c;再通过FileOutputStream拷贝到服务端的文件夹中&#xff0c;并将服务端的文件路径存入数据库中

codeforces round 151 div2(a,b,c)

中规中矩的前三题 题目链接 A 分类讨论就行 #include<bits/stdc.h>using namespace std;#define int long long #define PII pair<int,int>void solve() {int n, k, x;cin >> n >> k >> x;if (x ! 1) {cout << "YES" <<…

Spark-core面试知识点

Spark课程(web&#xff1a;默认值是8080&#xff0c;但是这个端口号容易被占用&#xff0c;顺势1&#xff1b;提交任务端口号&#xff1a;7077) 一、RDD RDD是spark最底层的核心抽象&#xff0c;叫做弹性分布式数据集。 特点&#xff1a;不可变&#xff0c;可分区&#xff0…