【问题标题】:Setting the size for an antd select component options list设置 antd select 组件选项列表的大小
【发布时间】:2021-03-23 04:09:04
【问题描述】:

HTML select 元素使用attribute size 来确定在滚动选择元素中一次应显示多少行。

下面的代码使用size="4"一次显示4个选项。

我想知道如何在 React 应用程序中使用 Ant Design Select component 获得相同的功能。

我尝试设置属性sizemultiple,但都不起作用。我对 JavaScript 解决方案持开放态度。有什么想法吗?

工作代码:

<select size="4">
  <option id="apple" selected>Apple</option>
  <option id="orange">Orange</option>
  <option id="pineapple">Pineapple</option>
  <option id="banana">Banana</option>
</select>

antd的示例代码:

const {  Select  } = antd;

const { Option } = Select;

ReactDOM.render(
  <Select
    showSearch
    style={{ width: 200 }}
    placeholder="Search to Select"
    optionFilterProp="children"
    filterOption={(input, option) =>
      option.children.toLowerCase().indexOf(input.toLowerCase()) >= 0
    }
    filterSort={(optionA, optionB) =>
      optionA.children.toLowerCase().localeCompare(optionB.children.toLowerCase())
    }
  >
    <Option value="1">Not Identified</Option>
    <Option value="2">Closed</Option>
    <Option value="3">Communicated</Option>
    <Option value="4">Identified</Option>
    <Option value="5">Resolved</Option>
    <Option value="6">Cancelled</Option>
  </Select>,
  mountNode,
);

【问题讨论】:

  • 有人有什么建议吗?
  • 查看documentation,来自Ant 的选择不支持预先在列表中显示多个项目。他们的selectsize 属性是大、中或小。
  • 您知道使用 react 的任何方法吗?
  • 没有意义。如果您查看为 Ant select 生成的代码,它使用 div 和 span。
  • 有人有什么建议吗?

标签: javascript html reactjs drop-down-menu antd


【解决方案1】:

antd Selectbuilt 位于 rc-select 包之上,而不是浏览器自己的 select,因此仅传递 select 属性是行不通的。

该组件设计有一个部分显示当前选定的项目并允许用户键入,另一部分显示选项列表。听起来您希望选项列表成为唯一的部分?用户只需通过滚动列表来选择或取消选择。

我只是其中的一部分,但希望这会有所帮助。

  • mode="multiple" 允许多选
  • open={true} 使选项列表始终显示。请注意,这被视为叠加层,将覆盖其他内容,因此您需要修复一些样式。
  • listHeight 最接近您的要求,但这需要多个像素而不是行数。每个选项在标准尺寸下都是 32 像素,因此您需要 4 * 32128
import "antd/dist/antd.css";
import { Select } from "antd";
const { Option } = Select;

export default () => (
  <Select
    style={{ width: 200 }}
    placeholder="Hide Me"
    mode="multiple"
    open={true}
    listHeight={128}
  >
    <Option value="1">Not Identified</Option>
    <Option value="2">Closed</Option>
    <Option value="3">Communicated</Option>
    <Option value="4">Identified</Option>
    <Option value="5">Resolved</Option>
    <Option value="6">Cancelled</Option>
  </Select>
);

我还没弄清楚如何用当前选择隐藏顶部。你可以用 CSS 做到这一点,但应该有更好的方法。

【讨论】:

  • 我在我的真实代码中实现了这一点,现在我得到了:键入'string | undefined' 不可分配给类型 'Key'。类型 'undefined' 不可分配给类型 'Key'.ts(2322) index.d.ts(12, 5):预期的类型来自属性 'value',它在类型 'IntrinsicAttributes & OptionProps & { children ?: 反应节点; }'
  • 听起来您正在将选项 key 设置为可选但可能应该是必需的属性。
  • 此时点击的项目进入“隐藏我”,如何让他们一个一个去那里而不是很多?
  • 摆脱mode="multiple"?我只是假设您希望能够选择多个。
  • 我想在下拉菜单中有不止一个,但是当点击这些时会转到“隐藏我”,我不希望用户能够点击很多项目,只有一个一个(我的意思是在“隐藏我”中应该是一个而不是更多,如果用户想要更多,他只需将其取消单击回到向下并从列表中单击另一个即可到达那里)
猜你喜欢
  • 2021-01-15
  • 2017-11-16
  • 1970-01-01
  • 2020-11-21
  • 2021-08-04
  • 2016-08-04
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
相关资源
最近更新 更多