【发布时间】:2020-06-03 05:13:19
【问题描述】:
这是我的问题: 我需要使用 Material UI 在 React 上创建一个多选(带复选框),如下图所示:
我有一个数组中的数据,如下所示
data = [
{
id: 199,
name: "Argentina",
state: [
{ name: "Buenos Aires", id: 1 },
{ name: "Cordoba", id: 2 },
{ name: "Chaco", id: 2 }
]
},
{
id: 200,
name: "USA",
state: [
{ name: "California", id: 4 },
{ name: "Florida", id: 5 },
{ name: "Texas", id: 6 }
]
}
]
完美。一切似乎都要做2个嵌套地图,没什么特别的。同时,我试试这个:
<InputLabel htmlFor="grouped-select">Grouping</InputLabel>
<Select
defaultValue={[]}
id="grouped-select"
onChange={handleChange}
multiple
>
<MenuItem value="">
<Checkbox />
<em>All</em>
</MenuItem>
{data.map(country => (
<>
<ListSubheader key={country.id}>{country.name}</ListSubheader>
{country.state.map(state => (
<MenuItem key={state.id} value={state.id}>
<Checkbox />
{state.name}
</MenuItem>
))}
</>
))}
</Select>
这很好地呈现了选择,使它看起来不错。但我的问题是(显然)材料在选择中不接受 React.Fragment (<></>)。同时,我无法生成 Material UI 在文档中通过数组循环指定的结构:
<ListSubheader>Parent 1</ListSubHeader>
<MenuItem key={state.id} value={state.id}>Child1</MenuItem>
<MenuItem key={state.id} value={state.id}>Child2</MenuItem>
<MenuItem key={state.id} value={state.id}>Child...n</MenuItem>
<ListSubheader>Parent 2</ListSubHeader>
<MenuItem key={state.id} value={state.id}>Child</MenuItem>
<MenuItem key={state.id} value={state.id}>Child...n</MenuItem>
如果我使用<div> 或其他元素代替<></>,onchange 事件将停止工作。
我也尝试过对数组使用渲染,但由于第二个兄弟不是 jsx,所以效果不佳,但我必须循环遍历数组。
{data.map(country => [
<ListSubheader key={country.id}>{country.name}</ListSubheader>
{country.state.map(state => (
<MenuItem key={state.id} value={state.id}>
<Checkbox />
{state.name}
</MenuItem>
))}
])}
我被卡住了,不知道怎么解决。我想到了一个子组件,但是在渲染它时我会遇到同样的问题。
有办法解决吗?
我留下了示例 sn-p 的链接:https://codesandbox.io/s/material-demo-h77i8
非常感谢。
【问题讨论】:
标签: javascript reactjs material-ui