【问题标题】:Send multiple components with a singe props in React.js with Material UI使用 Material UI 在 React.js 中使用单个道具发送多个组件
【发布时间】:2021-01-18 23:13:03
【问题描述】:

有什么方法可以使用 Material UI 在一个道具中发送多个<MenuItem>

Form.js

export default function MyForm = (props) => {

<FormControl
        <Select value={ItemValue} >
          items={props.items}
        </Select>
</FormControl>

}

我尝试以不同的方式输出道具。在&lt;MenuItem&gt; 之间设置逗号只会呈现最后一个&lt;MenuItem&gt;。用&lt;React.Fragment&gt; 包裹它确实有效,但是MenuItem value 不会从value={ItemValue} 得到纠察

{ItemValue} 这里只是一个在事件处理中获取MenuItem value 的函数。

App.js

<MyForm
    items={
           <MenuItem value={1}>value 1</MenuItem>
           <MenuItem value={2}>value 2</MenuItem>
           <MenuItem value={3}>value 3</MenuItem>
           <MenuItem value={4}>value 4</MenuItem>
          }
/>

有什么合适的配置方法吗?

【问题讨论】:

  • Docs 声明菜单项必须是 Select 的直接后代,这就是您会遇到值问题的原因。我会考虑在您的 App.js 中提供一个标签/值数组,然后将它们映射为 Form.js 中的 MenuItem,这将允许您指定值和标签,同时还将 MenuItems 保留为直接后代。

标签: reactjs material-ui react-props


【解决方案1】:

最简单的解决方法是将值作为道具传递到 MyForm 作为值数组,这是一个说明性示例: App.js

export default function App() {
const myItemsValues = [1, 2, 3, 4];
return (
    <div>
        <MyForm items={myItemsValues} />
    </div>
);}

MyForm.js

export default function MyForm({ items }) {
return (
    <div>
        <FormControl>
            <Select value={1}>
                {items.map((value) => {
                    return <MenuItem value={value}>{value}</MenuItem>;
                })}
            </Select>
        </FormControl>
    </div>
);}

如果你坚持将它们作为一个集合传递:

export default function App() {
const myItemsValues = [1, 2, 3, 4];
const myItemsComponents = myItemsValues.map((value) => {
    return <MenuItem value={value}>{value}</MenuItem>;
});
return (
    <div>
        <MyForm items={myItemsComponents} />
    </div>
);}
export default function MyForm({ items }) {
return (
    <div>
        <FormControl>
            <Select value={1}>{items}</Select>
        </FormControl>
    </div>
);}

基本上是一样的,都会产生同样的结果。

【讨论】:

  • 实际项目比示例更复杂,我有许多不同的表单,它们的值和 MenuItem 的数量不同,但我想我可以使用您的解决方案来找出使其工作的方法。谢谢。
  • 你可以简单地使用状态来管理它们,但你明白了重点
  • 在映射组件数组时不要忘记添加键。 const myItemsComponents = myItemsValues.map((value, index) =&gt; (&lt;MenuItem key={value.id || index} value={value}&gt;{value}&lt;/MenuItem&gt;);
猜你喜欢
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多