Skip to content

Commit 48a6f5f

Browse files
authored
feat: 添加手动控制选中值的功能到 Picker 组件
1 parent 8600d5f commit 48a6f5f

2 files changed

Lines changed: 52 additions & 1 deletion

File tree

src/components/picker/demos/demo1.tsx

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,45 @@ function RenderChildrenDemo() {
7272
)
7373
}
7474

75+
// 手动控制选中值
76+
function SelectedDemo() {
77+
const [value, setValue] = useState<(string | null)[]>([])
78+
79+
const [selectValue, setSelectValue] = useState<(string | null)[]>([])
80+
return (
81+
<Picker
82+
columns={basicColumns}
83+
value={value}
84+
title={
85+
<div
86+
onClick={() => {
87+
setSelectValue(['Fri', 'pm'])
88+
}}
89+
>
90+
设置为星期五下午
91+
</div>
92+
}
93+
selectValue={selectValue}
94+
onConfirm={setValue}
95+
onSelect={(val, extend) => {
96+
console.log('onSelect', val, extend.items)
97+
setSelectValue(val)
98+
}}
99+
>
100+
{(items, { open }) => {
101+
return (
102+
<Space align='center'>
103+
<Button onClick={open}>选择</Button>
104+
{items.every(item => item === null)
105+
? '未选择'
106+
: items.map(item => item?.label ?? '未选择').join(' - ')}
107+
</Space>
108+
)
109+
}}
110+
</Picker>
111+
)
112+
}
113+
75114
export default () => {
76115
return (
77116
<>
@@ -83,6 +122,10 @@ export default () => {
83122
<RenderChildrenDemo />
84123
</DemoBlock>
85124

125+
<DemoBlock title='使用 selectValue 来控制选择值'>
126+
<SelectedDemo />
127+
</DemoBlock>
128+
86129
<DemoBlock title='使用 actions 来控制显示/隐藏'>
87130
<Space direction='vertical' block>
88131
<ActionsDemo />

src/components/picker/picker.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,15 @@ export const Picker = memo(
130130

131131
const extend = useColumnsExtend(props.columns, value)
132132

133-
const [innerValue, setInnerValue] = useState<PickerValue[]>(value)
133+
const [innerValue, setInnerValue] = usePropsValue({
134+
value: props.selectValue,
135+
defaultValue: value,
136+
onChange: val => {
137+
const extend = generateColumnsExtend(props.columns, val)
138+
props.onSelect?.(val, extend)
139+
},
140+
})
141+
134142
useEffect(() => {
135143
if (innerValue !== value) {
136144
setInnerValue(value)

0 commit comments

Comments
 (0)