javascript - 如何从 Svelte 组件中导出更改组件中值的函数?
问题描述
我有一个名为WastedTime.svelte
value的组件wastedTime
。还有一个函数可以将值更改为50
(在我的真实代码中,这是一个动画,但这是 Stack Overflow 的简化测试用例)。
为了允许从父级调用子函数,我使用<script context="module">
了 Svelte 文档:
<script context="module">
var wastedTime = 0;
export function changeNumber(){
console.log('changing number')
wastedTime = 50
}
</script>
<script>
// Putting 'var wastedTime = 0' here doesn't work either
</script>
<h1>Wasted time: {wastedTime}</h1>
父母从以下位置调用孩子中的函数onMount
:
<script>
import { onMount } from 'svelte';
import WastedTime, {changeNumber } from './WastedTime.svelte';
onMount(() => {
changeNumber()
});
</script>
<WastedTime />
问题是,既然wastedTime
提到了<script context="module">
,它似乎无法改变wastedTime
。导出的函数运行,但wastedTime
保持为 0。
我试过: -var wastedTime = 0
投入<script context="module">
-var wastedTime = 0
投入<script>
两者都不起作用。
如何从 Svelte 组件中导出更改组件中值的函数?
解决方案
<script context="module">
不是响应式的——更改此块内的变量不会影响单个实例(除非您更改了存储值,并且每个实例都订阅了该存储)。
相反,changeNumber
直接从实例中导出函数,并通过以下方式获取对它的引用bind:this
:
浪费时间.svelte
<script>
var someNumber = 0;
export function changeNumber(){
console.log('changing number')
someNumber = 56
}
</script>
<h1>Wasted time: {someNumber}</h1>
App.svelte
<script>
import { onMount } from 'svelte';
import WastedTime from './WastedTime.svelte';
let wastedTimeComponent;
onMount(() => {
wastedTimeComponent.changeNumber()
});
</script>
<WastedTime bind:this={wastedTimeComponent} />
此处演示:https ://svelte.dev/repl/f5304fef5c6e43edb8bf0d25d634f965
推荐阅读
- django - /register/ 处的 TemplateSyntaxError 第 20 行上的无效块标记:'endblock'。您是否忘记注册或加载此标签?
- java - Java S3 上传大文件 (~ 1.5Tb) 时出现 ResetException 错误。通过 InputStream 读取/处理文件
- excel - 隐藏 excel 列错误报告宽度
- java - java.lang.NoSuchMethodError: com.google.common.collect.ImmutableList.toImmutableList()Ljava/util/stream/Collector
- google-cloud-firestore - 使用地图设计多对多模型
- react-native - React Native 'yarn run ios' 没有在 M1 上初始化项目
- python - 如何使用 Plotly Express 创建子图
- macos - Flutter macos 桌面代码从 gmail 帐户发送 gmail
- reactjs - react-snap 在 netlify 中构建应用程序需要多少时间
- stripe-payments - Stripe 节点 SDK 错误 - 按 transfer_group 列出费用