Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Svelte Reactive Variable Sharing between Components

I have a question regarding reactive variable sharing between components. I have an example with checkboxes. Whenever only the sink checkbox is checked, I want to return a paragraph with a specific message. However, only the else statement is evaluated in component 2.

Maybe I have to use the store in svelte? I am not sure how to accomplish that.

A REPL can be found here: https://svelte.dev/repl/f2da2e91083f41098bd9b7c84ec199d2?version=3.49.0

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

The app component looks like this

<script>
    import Component2 from './Component2.svelte';
    
    let checked_sink = true;
    let checked_source = false;
    export let sink_source_checkbox = ["Sink"]
</script>

<label>
<input type=checkbox name="sink_source" value="Sink" bind:group={sink_source_checkbox} bind:checked={checked_sink}>
Sink
</label>
<label>
<input type=checkbox name="sink_source" value="Source" bind:group={sink_source_checkbox} bind:checked={checked_source}>
Source
</label>

<Component2/> 

checked 1: {checked_sink} <br/>
checked 2: {checked_source} <br/>
{JSON.stringify(sink_source_checkbox.toString())} 

And the 2nd component looks lik this

<script>
import sink_source_checkbox from './App.svelte';
</script>

{#if sink_source_checkbox.toString() === "Sink"}
    <p>
        It is only Sink
</p>
{:else}
<p>
    It is not only Sink
</p>
{/if}

>Solution :

Instead of the import export the variable from Component2 and pass it as a prop REPL

(There are probably various ways check for only ‘Sink’… And maybe you might reduce your example and just use the group binding without the parallel tracking of bind:checked. I changed that in the Repl…)

<script>
    export let checked
</script>

{#if checked.join() === "Sink"}
<p>
    It is only Sink
</p>
{:else}
<p>
    It is not only Sink
</p>
{/if}

In App.svelte

<Component2 checked={sink_source_checkbox}/> 
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading