From 5523047b6972b01e4d7c7656900990628e8d8fc2 Mon Sep 17 00:00:00 2001 From: Vixalie Date: Wed, 13 Aug 2025 22:48:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(components):=20=E6=B7=BB=E5=8A=A0=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E9=80=89=E4=B8=AD=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 Check、Radio、RadioGroup 和 Segments 组件中添加默认选中值属性 - 使用 onMount 在组件挂载时设置默认选中值 - 优化了组件的初始化逻辑,确保默认值能够正确显示 --- src/components/Check.tsx | 7 +++++++ src/components/Radio.tsx | 7 +++++++ src/components/RadioGroup.tsx | 7 +++++++ src/components/Segments.tsx | 7 +++++++ 4 files changed, 28 insertions(+) diff --git a/src/components/Check.tsx b/src/components/Check.tsx index 58c9625..cf94db7 100644 --- a/src/components/Check.tsx +++ b/src/components/Check.tsx @@ -5,6 +5,7 @@ import { createMemo, createSignal, mergeProps, + onMount, ParentComponent, ParentProps, Show, @@ -14,6 +15,7 @@ import { Dynamic } from 'solid-js/web'; interface CheckBoxProps { name?: string; checked?: boolean; + defaultChecked?: boolean; disabled?: boolean; onChange?: (checked?: boolean) => void; } @@ -40,6 +42,11 @@ const Check: ParentComponent = (props) => { const originalChecked = createMemo(() => mProps.checked); const [internalChecked, setInternalChecked] = createSignal(undefined); + onMount(() => { + if (isNotNil(mProps.defaultChecked)) { + setInternalChecked(mProps.defaultChecked); + } + }); createEffect(() => { if (isNotNil(originalChecked()) && originalChecked() !== internalChecked()) { setInternalChecked(originalChecked()); diff --git a/src/components/Radio.tsx b/src/components/Radio.tsx index 57074bc..f5c4d83 100644 --- a/src/components/Radio.tsx +++ b/src/components/Radio.tsx @@ -5,6 +5,7 @@ import { createMemo, createSignal, mergeProps, + onMount, ParentComponent, ParentProps, Show, @@ -14,6 +15,7 @@ import { Dynamic } from 'solid-js/web'; interface RadioProps { name?: string; checked?: boolean; + defaultChecked?: boolean; disabled?: boolean; onChange?: (value?: boolean) => void; } @@ -40,6 +42,11 @@ const Radio: ParentComponent = (props) => { const originalChecked = createMemo(() => mProps.checked); const [internalChecked, setInternalChecked] = createSignal(undefined); + onMount(() => { + if (isNotNil(mProps.defaultChecked)) { + setInternalChecked(mProps.defaultChecked); + } + }); createEffect(() => { if (isNotNil(originalChecked()) && originalChecked() !== internalChecked()) { setInternalChecked(originalChecked()); diff --git a/src/components/RadioGroup.tsx b/src/components/RadioGroup.tsx index 519a4f5..8a9da62 100644 --- a/src/components/RadioGroup.tsx +++ b/src/components/RadioGroup.tsx @@ -7,6 +7,7 @@ import { Index, JSX, mergeProps, + onMount, Show, } from 'solid-js'; import Radio from './Radio'; @@ -20,6 +21,7 @@ interface RadioGroupProps { name?: string; options?: Option[]; value?: Option['value']; + defalutValue?: Option['value']; disabled?: boolean; onChange?: (value?: Option['value']) => void; } @@ -36,6 +38,11 @@ const RadioGroup: Component = (props) => { const originalValue = createMemo(() => mProps.value); const [selectedValue, setSelectedValue] = createSignal(undefined); + onMount(() => { + if (isNotNil(mProps.defalutValue)) { + setSelectedValue(mProps.defalutValue); + } + }); createEffect(() => { if (isNotNil(originalValue()) && originalValue() !== selectedValue()) { setSelectedValue(originalValue()); diff --git a/src/components/Segments.tsx b/src/components/Segments.tsx index 14f86b1..877fb03 100644 --- a/src/components/Segments.tsx +++ b/src/components/Segments.tsx @@ -8,6 +8,7 @@ import { Index, JSX, mergeProps, + onMount, Show, } from 'solid-js'; @@ -20,6 +21,7 @@ interface SegmentsProps { name?: string; options: Option[]; value?: Option['value']; + defaultValue?: Option['value']; direction?: 'horizontal' | 'vertical'; disabled?: boolean; onChange?: (value: Option['value'] | undefined) => void; @@ -43,6 +45,11 @@ const Segments: Component = (props) => { const [indicatorHeight, setIndicatorHeight] = createSignal(0); const [indicatorWidth, setIndicatorWidth] = createSignal(0); + onMount(() => { + if (isNotNil(mProps.defaultValue)) { + setSelected(mProps.defaultValue); + } + }); createEffect(() => { if (isNotNil(originalValue()) && originalValue() !== selected()) { setSelected(originalValue());