制作和编辑表单 - 如何在 CreatableSelect 中设置默认输入值 (React-select)
Making and edit form - How set default input values in a CreatableSelect (React-select)
我正在为 API 文档制作编辑表单。其中两个输入是 select 类型,其中一个是可以有多个输入的 CreatableSelect。当我引入文档并将其设置为存储时的状态时,我不确定如何预填充此类输入以允许用户引用和编辑。数据存储为字符串数组,但 CreatableSelect 的选项存储为具有标签和值的对象。
传入文档存储可创建的多 select 数据,如下所示:
tags: ['Offbeat', 'sculpture']
CreatableSelect 将选项作为对象数组接收,如下所示还有更多:
{label: 'Offbeat', value: 'Offbeat'}
{label: 'sculpture', value: 'sculpture'}
选项数据作为字符串数组引入,我将它们转换为对象数组,如上所示,作为 CreatableSelect 的选项。
我正在为文档创建一个编辑路径,并希望看到 selected 数组项预填充表单上的输入,以便用户可以添加或删除选项。我尝试使用 defaultValue
<CreatableSelect>
的道具
<Form.Group className='mb-2'>
<Form.Label htmlFor='tags'>Edit/Add Tags?</Form.Label>
{defaultMultiSelect && <CreatableSelect
isClearable
isMulti
options={allTagsStructured}
onChange={(value) => handleMultiCreateChange('tags', value)}
defaultValue={[{label: 'sculpture', value: 'sculpture'}, {label: 'offbeat', value: 'offbeat'}]}
defaultInputValue={'art'}
/>}
在 defaultValue 和 defaultInputValue 之间,前者给了我正在寻找的输出,但为了使表单动态化,我试图创建一个预 selected 选项的变量以放入 defaultValue
道具
const [defaultMultiSelect, setDefaultMultiSelect] = useState([])
const [defaultTypeSelect, setDefaultTypeSelect] = useState([])
useEffect(() => {
const getData = async () => {
console.log(id)
try {
const { data } = await axios.get(`/api/pins/${id}`)
console.log(data)
setFormData(data)
handleIncomingtags(data.tags)
handleIncomingType(data.typeOfPlace)
} catch (error) {
console.log(error)
}
}
getData()
}, [id])
const handleIncomingtags = (tags) => {
const selectOptions = []
tags.map(tag => {
const obj = {}
obj.label = tag
obj.value = tag
return selectOptions.push(obj)
})
setDefaultMultiSelect(selectOptions)
console.log(selectOptions)
console.log(defaultMultiSelect)
}
const handleIncomingType = (type) => {
const selectOptions = []
type.map(oneType => {
const obj = {}
obj.label = oneType
obj.value = oneType
return selectOptions.push(obj)
})
setDefaultTypeSelect(selectOptions)
console.log(defaultTypeSelect)
}
这会保存我想要在 select 输入中的文档选项数组:
[{label: 'Bar', value: 'Bar'}, {label: 'Gaming', value: 'Gaming'}, {label: 'Social', value: 'Social'}]
const [defaultMultiSelect, setDefaultMultiSelect] = useState([])
状态的默认值是一个空数组,它是一个真值,它应该被设置为一个假值,否则它会在任何数据进来之前触发加载渲染:
const [defaultMultiSelect, setDefaultMultiSelect] = useState(null)
我正在为 API 文档制作编辑表单。其中两个输入是 select 类型,其中一个是可以有多个输入的 CreatableSelect。当我引入文档并将其设置为存储时的状态时,我不确定如何预填充此类输入以允许用户引用和编辑。数据存储为字符串数组,但 CreatableSelect 的选项存储为具有标签和值的对象。
传入文档存储可创建的多 select 数据,如下所示:
tags: ['Offbeat', 'sculpture']
CreatableSelect 将选项作为对象数组接收,如下所示还有更多:
{label: 'Offbeat', value: 'Offbeat'}
{label: 'sculpture', value: 'sculpture'}
选项数据作为字符串数组引入,我将它们转换为对象数组,如上所示,作为 CreatableSelect 的选项。
我正在为文档创建一个编辑路径,并希望看到 selected 数组项预填充表单上的输入,以便用户可以添加或删除选项。我尝试使用 defaultValue
<CreatableSelect>
<Form.Group className='mb-2'>
<Form.Label htmlFor='tags'>Edit/Add Tags?</Form.Label>
{defaultMultiSelect && <CreatableSelect
isClearable
isMulti
options={allTagsStructured}
onChange={(value) => handleMultiCreateChange('tags', value)}
defaultValue={[{label: 'sculpture', value: 'sculpture'}, {label: 'offbeat', value: 'offbeat'}]}
defaultInputValue={'art'}
/>}
在 defaultValue 和 defaultInputValue 之间,前者给了我正在寻找的输出,但为了使表单动态化,我试图创建一个预 selected 选项的变量以放入 defaultValue
道具
const [defaultMultiSelect, setDefaultMultiSelect] = useState([])
const [defaultTypeSelect, setDefaultTypeSelect] = useState([])
useEffect(() => {
const getData = async () => {
console.log(id)
try {
const { data } = await axios.get(`/api/pins/${id}`)
console.log(data)
setFormData(data)
handleIncomingtags(data.tags)
handleIncomingType(data.typeOfPlace)
} catch (error) {
console.log(error)
}
}
getData()
}, [id])
const handleIncomingtags = (tags) => {
const selectOptions = []
tags.map(tag => {
const obj = {}
obj.label = tag
obj.value = tag
return selectOptions.push(obj)
})
setDefaultMultiSelect(selectOptions)
console.log(selectOptions)
console.log(defaultMultiSelect)
}
const handleIncomingType = (type) => {
const selectOptions = []
type.map(oneType => {
const obj = {}
obj.label = oneType
obj.value = oneType
return selectOptions.push(obj)
})
setDefaultTypeSelect(selectOptions)
console.log(defaultTypeSelect)
}
这会保存我想要在 select 输入中的文档选项数组:
[{label: 'Bar', value: 'Bar'}, {label: 'Gaming', value: 'Gaming'}, {label: 'Social', value: 'Social'}]
const [defaultMultiSelect, setDefaultMultiSelect] = useState([])
状态的默认值是一个空数组,它是一个真值,它应该被设置为一个假值,否则它会在任何数据进来之前触发加载渲染:
const [defaultMultiSelect, setDefaultMultiSelect] = useState(null)