Я новичок в Svelte и мне это нравится! Создание однокомпонентного приложения с несколькими частями пользовательского интерфейса и общим состоянием до смешного весело и легко (приходит со средними знаниями HTML, CSS, & JS и новичками в React).
В конечном итоге, однако, я надеюсь создать более сложные приложения, которые будут включать в себя множество входов и состояний, поэтому, очевидно, мне нужно понимать, как использовать состояние между компонентами.
Однако , Я немного не понимаю, как лучше всего создать настраиваемый компонент ввода и лучше всего использовать состояние в другом месте. В частности, я хочу создать компонент input type="range"
с индивидуальным стилем и использовать его в родительском элементе.
В ходе написания этого вопроса я нашел подход, который, кажется, работает, но я не могу найти что-то в документации или в Google, что полностью соответствует этому случаю, поэтому я не уверен в своем решение. Вот что я придумал: https://github.com/arrowtype/svelte-slider/.
Краткое изложение моего решения
Я начал с шаблона Svelte JS (https://github.com/sveltejs/template).
My App.svelte
выглядит так:
<script>
import SimpleSlider from './SimpleSlider.svelte'
export let sliderValA = 0;
export let sliderValB = 15;
</script>
<main>
<h1>A simple SvelteJS slider component</h1>
<p>Slider A value is {sliderValA}</p>
<SimpleSlider bind:value={sliderValA} min="0" max="10" step="1"/>
<p>Slider B value is {sliderValB}</p>
<SimpleSlider bind:value={sliderValB} min="0" max="30" step="5"/>
<p>A + B is {sliderValA + sliderValB}</p>
</main>
И SimpleSlider.svelte
выглядит так:
<script>
export let value = 5;
export let min = 0;
export let max = 10;
export let step = 1;
</script>
<div class="slider-container">
<input type="range" bind:value={value} min={min} max={max} step={step}>
<span>{value}</span>
</div>
<style>
.slider-container {
display: flex;
align-items: center;
}
input {
margin:0 0.5em 0 0;
}
</style>
В моем тестировании это работало. Но мне было сложно добраться туда, и я не уверен, является ли это наилучшей практикой.
Должен ли я делать что-то еще, например, использовать модуль svelte/store
для обработки глобального состояния (если нет , когда мне это может понадобиться)?