我可以在Vuex的settimeout函数中更改并提交状态吗?

布德米尔卡
form(@submit.prevent="onSubmit")
   input(type="text" v-model="platform" placeholder="Add platform name...")
   input(type="submit" value="Submit" class="button" @click="() => clicked = true")
   button(type="button" value="Cancel" class="btn" @click="bringComponent") Cancel      
      h3(v-if="clicked")  Thank you for adding a new platform 
         span {{ countdown }} 

这是我的模板,当用户提交表单时,我想使用setTimeout函数从3倒数,然后在3秒后提交。

如果我有这种方式,它会起作用;

data() {
  return {
    countdown: 3,
    platform: ""
  }
},
methods: {
  countDownTimer() {
    setTimeout(() => {
      this.countdown -= 1
      this.countDownTimer()
    }, 1000)
  },
  onSubmit() {
    let newplatform = {
      name: this.platform
    }
    this.addPlatform(newplatform)
    this.platform = ' ' 
    this.countDownTimer()
  }
}

但是,我还有3种形式,并且我不想重复代码。所以我想在商店里倒数,

countDownTimer({commit}) {
  setTimeout(() => {
    countdown = state.countdown
    countdown -= 1
    commit('COUNTDOWN', countdown)
    this.countDownTimer()
  }, 1000)
}

并像这样突变

COUNTDOWN(state, countdown) {
  state.countdown = countdown
}

这不起作用,我不确定是否可以更改状态,是否在settimeout函数中提交更改?有没有更好的方法可以实现呢?

问题:

  1. 递归setTimeout没有停止。
  2. 倒数计时器不会重设。
  3. 使用setInterval(和clearInterval)而不是递归的setTimeout
  4. 对于包括的异步逻辑setTimeout,请使用操作而不是突变。
  5. 包括state从上下文对象(你在哪里得到commit),否则将是不确定的。

尝试这个:

actions: {
  countDownTimer({ state, commit, dispatch }) {  // state, commit, dispatch
    commit('RESET');
    const interval = setInterval(() => {         // Use `setInterval` and store it
      commit('COUNTDOWN');
      if (state.countdown === 0) {
        clearInterval(interval);                 // Clear the interval
        dispatch('updateDatabase');              // Call another action
      }
    }, 1000)
  }
}
mutations: {
  RESET(state) {
    state.countdown = 3;
  },
  COUNTDOWN(state) {
    state.countdown--;
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以使用一个函数来更改React中的不同状态吗?

我可以使用插件 Vue DEVTOLLS 来更改生产应用程序的 vuex 状态吗?

我可以从Vuex存储中的一种变异中调用提交吗

我可以有一个 onClick 函数来更改 React-js 中的不同状态值吗

vuex-即使不建议,也可以直接更改状态吗?

我没有提交,并且状态在Vuex中已更新

我可以在以前的所有提交中更改我的名字和姓氏吗?

我可以使用它的前任之一压缩合并提交吗?

我可以使用cURL填写并提交此表单吗?

我可以更改SAXPY函数的公式吗?

我无法更改vuex的状态

在几个已知的 git 命令之后,我可以从 git 中检索未提交的更改吗?

在Git中,可以将我未提交的更改视为合并冲突吗?

我可以将一个文件中的更改分成两个提交吗?

如果我的变量是数组,如何更改vuex中的状态

我们可以在react app中同步访问更改后的reducer状态吗?

我可以通过在Shiny中更改selectInput的状态来触发eventReactive吗?

我可以更改位于React组件中的div的不透明度状态吗?

jQuery更改并提交

我可以将 setTimeout() 放在动态类中吗?

我可以在Java中更改参数吗?

我可以在函数中测试变量吗?

有什么方法可以更改我以前的 git 提交中的姓名和电子邮件历史记录吗?

我可以在 Vuex 中使用一个突变设置多个状态参数吗?

在React componentDidUpdate中,道具和状态可以同时更改吗?

您可以更慢地更改VueJS中的状态吗?

我可以从分支中删除以前的提交吗?

我可以查看特定提交中的所有文件吗?

我可以撤消GitHub存储库中的重置提交吗?