1

我有一个显示评论的轮播。单击按钮时,我收到此错误:

TypeError: $$invalidate(...) is not a function

奇怪的是,一切正常,所以没有任何东西被破坏。但我无法理解这个错误来自哪里或导致它的原因。这是代码:

<script>
    let showntestimonial = 1;
    const testimonials = [ { // array of objects } ];
</script>

<section class="customer-testimonial">
  <button
    class="arrowbox"
    on:click={() => (showntestimonial += 2)((showntestimonial = showntestimonial % 3))}>
    <i class="far fa-chevron-left" />
  </button>
  <div class="textbox">
    <p>
      {@html testimonials[showntestimonial].text[$language]}
    </p>
    <h2>
      {@html testimonials[showntestimonial].name}
    </h2>
  </div>
  <button
    class="arrowbox"
    on:click={() => (showntestimonial++)((showntestimonial = showntestimonial % 3))}>
    <i class="far fa-chevron-right" />
  </button>
</section>
4

2 回答 2

1

这不是 Svelte 错误,而是您的代码中的错误。当你写这个...

(showntestimonial++)((showntestimonial = showntestimonial % 3))

...您是在说“showntestimonial++使用参数调用(showntestimonial % 3)”。但showntestimonial++它不是一个函数,它是一个数字——你不能调用它。

于 2020-01-30T14:38:58.783 回答
0

好的,我仍然不知道问题的确切根源,但我能够通过使用“正常”函数语法而不是那种花哨的语法来解决它。所以修复错误的代码是这样的:

  <button
    class="arrowbox"
    on:click={() => {
      showntestimonial += 2;
      showntestimonial = showntestimonial % 3;
    }}>
    <i class="far fa-chevron-left" />
  </button>
于 2020-01-30T11:57:41.623 回答