svelte - 如何在 svelte 中使用自定义存储方法?

标签 svelte svelte-3 svelte-store

我正在制作一个模态,其属性存储在商店中。而不是像这样打开它,从一个元素:on:click={() => $modal.isOpen = true}
我想像这样打开它:on:click={() => $modal.toggle()}从一个元素。

这是我的代码:

export const modal = writable({
    isOpen: false,
    title: 'Title',
    content: 'Content',
    toggle: () => {
        console.log(modal)
        modal.set({ ...modal, isOpen: true });
    }
}); 

当我登录时 modal ,它只记录 set, subscribe, update方法。然后当我再次单击时,这些方法消失了:它正确地覆盖了它们,似乎我永远无法获得模态的初始化状态。我尝试使用 this 访问当前对象或参数( (a, b) => )但都不返回任何内容。

最佳答案

参数传递给 writable只包含数据,不包含方法。要创建自定义商店,请执行以下操作 this tutorial — 创建您自己的包装工厂 writable :

const toggleable = initial => {
  const store = writable(initial);

  return {
    ...store,
    toggle: () => store.update(n => !n)
  };
};

const modal = toggleable(false);

演示在这里:https://svelte.dev/repl/682ef8309f924ba7ad8de1e2f5069988?version=3.12.1

关于svelte - 如何在 svelte 中使用自定义存储方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58610895/

相关文章:

sass - 在 svelte 上运行 Storybook 时出现 scss 解析错误

tailwind-css - 使用 Turborepo、SvelteKit 和 Tailwind 的 monorepo 中的样式问题

javascript - 在组件初始化外部调用的函数

javascript - 如何在路线变化时保持精简的商店状态?

javascript - svelte react 值不会随商店更改而更新

javascript - 在 Rollup 构建的 Electron 应用程序中导入 Ramda 会导致错误

javascript - SvelteJS 是否将第三方库代码转换为纯 Javascript?

slim :应用程序/ld+json

svelte:组件如何修改其父级上的变量/对象?

javascript - 如何迭代 Svelte 商店中的数组?