рдмрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
рдореИрдВ рд╕рд╛рджреЗ рдЬреЗрдПрд╕ рдФрд░ рдЯреАрдПрд╕ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рднреНрд░рд╛рдордХ рдХреЛрдб рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рдЧрд▓рдд рдХрд┐рдпрд╛ рд╣реИред
рдкреНрд░рдЬрдирди рдХрд░рдирд╛
Parent.svelte
рдФрд░ Child.svelte
рдШрдЯрдХ рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рд╕реЗрдЯрдЕрдк рджреЗрдЦреЗрдВ:
// Parent.svelte
<script>
import {onMount} from "svelte"
import Child from "./Child.svelte"
let child
onMount(()=> {
})
</script>
<Child bind:this={child} />`
// Child.svelte
<script>
export let foo
export let bar = undefined
export const baz = () => {
console.log("executed function 'baz'!")
}
</script>
<div>
foo is: <em>{foo}</em><br/>
bar is: <em>{bar}</em>
</div>
<script></script>
рд╕рд╛рде JS :рдмрд╛рд▓ рдШрдЯрдХ рдкрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб bar
, baz
, foo
, ref
рдЖрджрд┐ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рдЕрдкреЗрдХреНрд╖рд┐рдд: рдХреЗрд╡рд▓ foo
рдФрд░ bar
ref
рд╡рд╣рд╛рдВ рдХреНрдпреЛрдВ рд╣реИ, рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?bar
, baz
, foo
рд╕рднреА рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ? :)
рдЕрдкреЗрдХреНрд╖рд┐рдд: bar
рд╡реИрдХрд▓реНрдкрд┐рдХ, baz
рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ, foo
рдЕрдирд┐рд╡рд╛рд░реНрдп (рдХрдВрд╕реЛрд▓ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЦреЗрдВ)ред
child
рдкрд░
foo
рд╕реВрдЪреАрдмрджреНрдз рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕реБрд▓рдн рдирд╣реАрдВ рд╣реИ (рдХрдВрд╕реЛрд▓ рддреНрд░реБрдЯрд┐ рджреЗрдЦреЗрдВ), baz
рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реИред
рдЕрдкреЗрдХреНрд╖рд┐рдд: foo
рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реИ, baz
рд╕реВрдЪреАрдмрджреНрдз рд╣реИ
рд╣рд╛рд▓рд╛рдВрдХрд┐ baz
рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рджреЗрдЦреЗрдВ)
<script lang="typescript"></script>
рд╕рд╛рде рдЯреАрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг:// Parent.svelte
<script lang="typescript">
import {onMount} from "svelte"
import Child from "./Child.svelte"
let child:Child
onMount(()=> {
})
</script>
<Child bind:this={child} />`
// Child.svelte
<script lang="typescript">
export let foo: number
export let bar: number = undefined
export const baz = (): void => {
console.log("executed function 'baz'!")
}
</script>
<div>
foo is: <em>{foo}</em><br/>
bar is: <em>{bar}</em>
</div>
рдмрд╛рд▓ рдШрдЯрдХ рдкрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб bar
, baz
, foo
, ref
рдЖрджрд┐ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рдЕрдкреЗрдХреНрд╖рд┐рдд: рдХреЗрд╡рд▓ foo
рдФрд░ bar
+ рдЖрджрд┐ред
bar
, baz
, foo
рд╕рднреА рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ? :)
рдЕрдкреЗрдХреНрд╖рд┐рдд: bar
рд╡реИрдХрд▓реНрдкрд┐рдХ, baz
рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ, foo
рдЕрдирд┐рд╡рд╛рд░реНрдп (рдХрдВрд╕реЛрд▓ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЦреЗрдВ)ред
child
-рд╕рдорд╛рди рдкрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдХреЗрд╡рд▓ $$prop_def
рдФрд░ $$slot_def
рджрд┐рдЦрд╛рддрд╛ рд╣реИ
$$prop_def
рдХреА рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж bar
, baz
, foo
(рдХреЗрд╡рд▓ baz
рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗ)foo
рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ "Cannot read ..."
-рд░реЛрд░ рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "Props cannot be read directly from the component ..."
рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗ$$prop_def.baz()
рдХреЙрд▓ рдХрд░рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдХрдВрд╕реЛрд▓-рддреНрд░реБрдЯрд┐ рджреЗрдЦреЗрдВ)child.baz()
рдЙрдореНрдореАрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддреА рд╣реИ (рдХрдВрд╕реЛрд▓ рджреЗрдЦреЗрдВ), рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реАрдПрд╕ рдХреЛрдб рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: "Property 'baz' does not exist on type 'Child__SvelteComponent_'. (ts2339)
рдХреЛрдб рдкреВрд░рд╛ рд╣реЛрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрддрдирд╛ рднреНрд░рд╛рдордХ / рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИ, рдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╢рд╛рдпрдж рдХреБрдЫ рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ? ! рдпрджрд┐ рдРрд╕рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХрд┐рд╕реА рднреА рд╕рдВрдХреЗрдд рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВрдЧреЗ!
рд╕рд┐рд╕реНрдЯрдо (рдХреГрдкрдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдкреВрд░реА рдХрд░реЗрдВ):
рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреИрдХреЗрдЬ
"rollup": "^2.21.0",
"rollup-plugin-svelte": "^5.2.3",
"@rollup/plugin-commonjs": "^14.0.0",
"@rollup/plugin-node-resolve": "^8.4.0",
"@rollup/plugin-typescript": "^5.0.2",
"svelte": "^3.24.0",
"svelte-preprocess": "^4.0.8",
"tslib": "^2.0.0",
"typescript": "^3.9.7"
tsconfig.json
"compilerOptions": {
"target": "es2017",
"strict": false,
"moduleResolution": "node",
"allowJs": false,
"lib": [
"es2017", "DOM"
],
"types": [
"svelte"
],
"baseUrl": "."
},
"include": [
"./src"
]
}
рдзрдиреНрдпрд╡рд╛рдж!
рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИ, рдЖрдкрдиреЗ рдмрд╕ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрдИ рдХрдорд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реИ
рдЖрд╣, рдареАрдХ рд╣реИ, рдЖрдк рддреЗрдЬреА рд╕реЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
- foo рд╡реИрдХрд▓реНрдкрд┐рдХ: рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдЦреНрдд рдореЛрдб рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рд░ рдкреНрд░реЛрдк рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдореЗрдВ рдЗрд╕ рдирд┐рд░реНрдгрдп рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдареАрдХ рд╣реИ, рдЗрд╕ рдПрдЯреАрдПрдо рдкрд░ рдЕрдкрдиреА рд░рд╛рдп рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдкрд╣рд▓реЗ рдЬрд╛рдБрдЪ / рдпрд╛рдж рдХрд░ рд▓реЗрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИред ЁЯдФ
рд╢реАрдШреНрд░ рдирд╡реАрдиреАрдХрд░рдг:
$$slot_def
рдЖрджрд┐ рдХреА рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПредref
рдЕрдм рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИ, рдЖрдкрдиреЗ рдмрд╕ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрдИ рдХрдорд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реИ