我想创建一个GunDB的全局实例,这样它只在客户端初始化一次,然后我可以在任何岛上使用它。
我在index.tsx中尝试简单地添加const gun = Gun()
并向岛发送道具,唯一的问题是岛组件看不到Gun实例,这很正常,因为Gun实例是在服务器端初始化的,而不是在客户端初始化的。
理论上,它只需要客户端的全局上下文。像createContext()
这样的东西在反应。
Fresh v1.1增加了Preact Signals支持。
预作用信号:
信号是一种表达状态的方式,可以确保应用程序无论变得多么复杂都能保持快速。信号基于反应原理,提供了出色的开发人员工效学,并为虚拟DOM优化了独特的实现。
…
// Imagine this is some global state that the whole app needs access to: const count = signal(0); function Counter() { return ( <button onClick={() => count.value++}> Value: {count.value} </button> ); }
您可以创建一个模块,为全局Gun
实例导出信号:
import { signal } from "@preact/signals";
export default signal(Gun());
然后,您可以将其导入任何交互式孤岛模块,以便在服务器端和客户端使用:
import gun from "./path/to/gun.ts";