LoginSignup
4
1

More than 1 year has passed since last update.

Svelteの$$restPropsと$$propsについて

Last updated at Posted at 2022-05-05

Svelteの$$restPropsと$$propsについて

$$props

$$props は、export で宣言されていないものも含めて、コンポーネントに渡されるすべてのプロパティ(props)を参照します。これは Svelte の最適化が難しいので、一般的には推奨されません。しかし、コンパイル時にどのようなプロパティがコンポーネントに渡されるかわからない場合など、稀なケースでは便利です。

下記の様に、Parent.svelteからChild.svelteを呼び込んでいる構造のコンポーネントがあるとする。

# Parent.svelte

<script lang="ts"> 

import Child from "./Child.svelte"

let name = "Taro";
let age = 18;
let gender = "man"
 </script>

 <Child {name} {age} {gender}/>

<style lang="postcss">
</style>
#Child.svelte

<script lang="ts">
  console.log($$props)
//Parentから渡されたpropsが全て格納されている。
 </script>

この場合、Childコンポーネントでname, age, genderをexportしていないが、コンパイルエラーとなりません。
なぜなら、$$propsで、Parentコンポーネントから渡される全てのprops(今回の場合は、name,age,gender)を受け取っているからです。

ログ.
{name: 'Taro', age: 18, gender: 'man'}

$$restProps

$$restProps には、exportで宣言されていないプロパティ(props)のみが含まれます。
これは他の未知の属性をコンポーネントの要素に渡すために使用できます。

$$propsと同じ最適化の問題を共有しており、同様に推奨されません。

exportされていないpropsのみを$$restPropsは受け取っています。
下記の場合、Child.svelteでnameはexportされているので$$restPropsには格納されていません。

# Parent.svelte

<script lang="ts"> 

import Child from "./Child.svelte"

let name = "Taro";
let age = 18;
let gender = "man"
 </script>

 <Child {name} {age} {gender}/>

<style lang="postcss">
</style>
<script lang="ts">
  export let name=""

  console.log($$restProps)
//Parentから渡されたpropsのうち、exportされていないものだけが格納されている。
 </script>
ログ.
{age: 18, gender: 'man'}

参考
https://svelte.jp/docs

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1