三元运算符在 React 组件中用于设置数据列表选项的值时失败
Ternary operator fails when used to set value of datalist option in React component
我的代码是用 React 编写的,我试图有条件地交换每个元素中分配给值的内容。 swap 作为道具传入,我认为它可以充当触发器,但是当我使用 swap=true vs swap=null 时我没有得到任何改变。
function DataList({label, onSelect, options, swap}) {
return (
<DataListContainer>
<CustomInput placeholder={label} list="items" name="item" id="item" required onChange={onSelect}></CustomInput>
<datalist id='items' >
{options? options.map(option => <option key={option.number} value={swap ? option.title : option.number}>{swap ? option.number : option.title}</option>) : null}
</datalist>
</DataListContainer>
);
}
这是实际呈现我的组件的代码。
<DataList
label='Select Chapter Number'
onSelect={changeChapterNumber}
options={chaptersFromSelectedComic}
/>
<DataList
label='Select Chapter Title'
onSelect={changeChapter}
options={chaptersFromSelectedComic}
swap={true}
/>
问题
您已将列表名称 (list="items"
) 包含在组件中,因此所有数据列表选项都引用相同的初始定义选项。
解决方案
将 list
属性公开为道具,以便每个 DataList
组件可以指定自己的一组选项。
function DataList({
label,
list, // <-- add list prop
onSelect,
options,
swap
}) {
return (
<DataListContainer>
<CustomInput
placeholder={label}
list={list} // <-- set list attribute for input
name="item"
id="item"
required
onChange={onSelect}
></CustomInput>
<datalist id={list}> // <-- set id for datalist options
{options
? options.map((option) => (
<option
key={option.number}
value={swap ? option.title : option.number}
>
{swap ? option.number : option.title}
</option>
))
: null}
</datalist>
</DataListContainer>
);
}
将 list
属性传递给每个 DataList
组件。
<DataList list="itemsA" label="List A" options={options} />
<DataList list="itemsB" label="List B" options={options} swap />
我的代码是用 React 编写的,我试图有条件地交换每个元素中分配给值的内容。 swap 作为道具传入,我认为它可以充当触发器,但是当我使用 swap=true vs swap=null 时我没有得到任何改变。
function DataList({label, onSelect, options, swap}) {
return (
<DataListContainer>
<CustomInput placeholder={label} list="items" name="item" id="item" required onChange={onSelect}></CustomInput>
<datalist id='items' >
{options? options.map(option => <option key={option.number} value={swap ? option.title : option.number}>{swap ? option.number : option.title}</option>) : null}
</datalist>
</DataListContainer>
);
}
<DataList
label='Select Chapter Number'
onSelect={changeChapterNumber}
options={chaptersFromSelectedComic}
/>
<DataList
label='Select Chapter Title'
onSelect={changeChapter}
options={chaptersFromSelectedComic}
swap={true}
/>
问题
您已将列表名称 (list="items"
) 包含在组件中,因此所有数据列表选项都引用相同的初始定义选项。
解决方案
将 list
属性公开为道具,以便每个 DataList
组件可以指定自己的一组选项。
function DataList({
label,
list, // <-- add list prop
onSelect,
options,
swap
}) {
return (
<DataListContainer>
<CustomInput
placeholder={label}
list={list} // <-- set list attribute for input
name="item"
id="item"
required
onChange={onSelect}
></CustomInput>
<datalist id={list}> // <-- set id for datalist options
{options
? options.map((option) => (
<option
key={option.number}
value={swap ? option.title : option.number}
>
{swap ? option.number : option.title}
</option>
))
: null}
</datalist>
</DataListContainer>
);
}
将 list
属性传递给每个 DataList
组件。
<DataList list="itemsA" label="List A" options={options} />
<DataList list="itemsB" label="List B" options={options} swap />