gpt4 book ai didi

javascript - 处理 Svelte 组件 Prop 的最佳方式

转载 作者:行者123 更新时间:2023-12-05 01:51:22 25 4
gpt4 key购买 nike

我正在使用 SvelteKit 和 Tailwind 构建应用程序。我知道在使用 Tailwind 设计样式时,建议利用组件来减少必须使用 Tailwinds 实用程序类编写的重复代码量。我的问题是,当基于 HTML 标签制作组件时,例如 <input>标签,在该组件中处理通常只是该标签属性的 Prop 变得势不可挡。 MDN 显示 <input>标签有 31 个可能的属性。我知道我不会使用所有这些,但是来回将它们作为 props 添加到组件中会变得很烦人。

解决这个问题的最佳方法是什么而不加起来 31 行 export let attribute到组件并将它们添加到组件内的真实 HTML 标记?

例子:

<script>
export let name;
export let id;
export let type;
export let disabled;
export let required;
export let minLength;
export let maxLength;
export let min;
export let max;
export let pattern;

let value;
let borderColor = '#D1D5DB';

const inputHandler = (e) => {
if (e.target.value === '') {
borderColor = '#D1D5DB';
} else {
borderColor = '';
}
};
</script>

<input
{name}
{id}
{type}
{disabled}
{required}
{minLength}
{maxLength}
{min}
{max}
{pattern}
on:input={inputHandler}
style={`border-color: ${borderColor}`}
class="
w-full px-1 py-px mb-4 bg-transparent border-2 border-gray-300
rounded-xl last:mb-0 valid:border-emerald-300 invalid:border-rose-400
"
/>

最佳答案

如果你想能够做到

<MyInputField name="123" maxLength="5" type="text">

无需声明所有这些额外的属性,最好的方法是使用 $$restProps,该对象将包含所有已传递给组件但尚未传递的 props被明确定义为 Prop (导出)。

<script>
export let name = "";
</script>

<input name={name} {..$$restProps}>

(这里定义了name,所以不会包含在$$restProps中,需要自己添加)

关于javascript - 处理 Svelte 组件 Prop 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72296342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com