我是 Svelte 的新手,我很喜欢它!制作一个带有几块 UI 和共享状态的单组件应用程序非常有趣和简单(需要具备 HTML、CSS 和 JS 的中级知识以及 React 的初学者知识)。
然而,最终,我希望制作更复杂的应用程序,这些应用程序将涉及大量输入和状态,所以很明显,我需要了解如何在组件之间使用状态。
但是,我对制作自定义输入组件和在其他地方最好地使用状态的最佳方法感到有些困惑。具体来说,我希望创建一个自定义样式的input type="range"
组件并在父级中使用它。
在写这个问题的过程中,我确实找到了一种似乎可行的方法,但是我在文档或谷歌搜索中找不到与这种情况完全匹配的东西,所以我不确定我的解决方案。这是我想出的:https ://github.com/arrowtype/svelte-slider/ 。
我的解决方案总结
我从 SvelteJS 模板 ( https://github.com/sveltejs/template ) 开始。
我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
模块来处理全局状态(如果没有,我什么时候开始需要它)?