有没有办法在 Svelte 中将 props 声明为可选

Gh0*_*05d 3 javascript svelte

我创建了一些带有可选道具的组件,例如hide={true}. 我的问题是,当我不通过该道具时,这些烦人的错误消息总是会淹没我的控制台:

<MyComponent> was created without expected prop 'hide'
Run Code Online (Sandbox Code Playgroud)

有没有办法将道具声明为可选?

jwe*_*rre 7

在某些情况下,您不需要默认值,因此最好使用默认值null

MyComponent.svelte

<script>
  export let myProp = null // Default value is null
</script>

<div class:has-some-prop={myProp}>
{#if myProp }
Has Prop: {myProp}
{:else}
No Prop
{/if}
</div>
Run Code Online (Sandbox Code Playgroud)

应用程序.svelte

<MyComponent/>
<MyComponent myProp='yep'/>
Run Code Online (Sandbox Code Playgroud)

结果

<div>No Prop</div>

<div class:has-some-prop>
Has Prop<span>yep</span>
</div>
Run Code Online (Sandbox Code Playgroud)


Che*_*yDT 6

只需给他们一个默认值。

MyComponent.svelte

<script>
  export let i = 123 // Default value is now 123
</script>

<!-- Output is "i = 123" -->
<p>i = {i}</p>
Run Code Online (Sandbox Code Playgroud)

App.svelte

<script>
    import MyComponent from './MyComponent.svelte'
</script>

<!-- No error here! -->
<MyComponent/>
Run Code Online (Sandbox Code Playgroud)

因此,在您的情况下,您将更export let hide改为export let hide = false.

  • 正确 - 这不是一种解决方法,而是*它的设计工作原理* (6认同)
  • 我不认为这是一个解决方法。看,您有一个组件需要一个属性(并且没有默认值),但您没有传递一个属性。那么您的应用程序很可能无法正常工作。每个组件都应该定义属性的默认值,即使没有传递,也可以正常工作。如果您无法为属性分配默认值,请检查这些错误消息是否缺少 props,或者在组件安装时没有所需 props 时抛出错误。 (4认同)
  • 好吧,如果这是我的意图,那么我将来会声明默认道具。感谢您的解释。 (2认同)