You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将使用useTimeoutPoll的Toggle按钮状态保存至LocalStorage?

如何将useTimeoutPoll的Toggle状态保存到LocalStorage?

要实现Toggle按钮状态的持久化,你需要自己维护一个绑定LocalStorage的状态,同步控制useTimeoutPoll的启停,具体步骤和修改后的代码如下:

1. 替换原状态,使用持久化的ref变量

不再直接使用useTimeoutPoll返回的isActive,而是自己创建一个从LocalStorage读取初始值的ref:

// 从LocalStorage读取初始状态,默认设为false(可根据你的需求调整默认值)
const isPollActive = ref(localStorage.getItem('pollActive') === 'true')

const fetchData = async () => {
  await data.loadUpdate(id)
}

2. 初始化useTimeoutPoll并绑定状态监听

初始化轮询插件时,手动控制启停逻辑,同时监听状态变化同步到LocalStorage:

// 初始化轮询,禁止立即启动(如果插件支持immediate参数)
const { pause, resume } = useTimeoutPoll(fetchData, 10000, {
  immediate: false
})

// 监听状态变化,同步到LocalStorage并控制轮询启停
watch(isPollActive, (newValue) => {
  localStorage.setItem('pollActive', newValue.toString())
  newValue ? resume() : pause()
}, { immediate: true }) // 初始化时立即执行一次,确保状态同步

// 简化Toggle的点击逻辑
const toggleUpdate = () => {
  isPollActive.value = !isPollActive.value
}

如果你的useTimeoutPoll不支持immediate参数,可以先手动暂停,再执行监听:

const { pause, resume } = useTimeoutPoll(fetchData, 10000)
// 初始化先暂停,避免默认启动
pause()

watch(isPollActive, (newValue) => {
  localStorage.setItem('pollActive', newValue.toString())
  newValue ? resume() : pause()
}, { immediate: true })

3. 修改模板绑定

将Toggle的v-model绑定到我们自己维护的isPollActive:

<Toggle
  v-model="isPollActive"
  @click="toggleUpdate"
>
  <span>update</span>
</Toggle>

原理说明

  • 页面加载时,isPollActive会从LocalStorage读取上次保存的状态,避免刷新后重置
  • 每次Toggle切换时,状态变化会被watch捕获,自动同步到LocalStorage,并调用resume/pause控制轮询
  • 简化后的toggleUpdate直接切换状态,逻辑更清晰

内容的提问来源于stack exchange,提问作者Tambua Rex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 10:25:22