Chakra-UI 是一个流行的 React UI 框架,它提供了一系列可重用的组件,用于构建响应式和可访问的 Web 应用程序。复选框(Checkbox)是其中之一,常用于用户界面中的多选操作。
“选择全部/部分”复选框是一种特殊的复选框,通常用于一组复选框的上方,允许用户一次性选择或取消选择所有子复选框。此外,当部分子复选框被选中时,该复选框会显示为“部分选中”状态。
应用场景包括但不限于:
以下是一个使用 Chakra-UI 实现“选择全部/部分”复选框的示例代码:
import React, { useState } from 'react';
import { Box, Checkbox, FormControl, FormLabel } from '@chakra-ui/react';
const CheckboxGroup = ({ options }) => {
const [selectedItems, setSelectedItems] = useState([]);
const [isIndeterminate, setIsIndeterminate] = useState(false);
const handleSelectAll = (event) => {
if (event.target.checked) {
setSelectedItems(options.map((option) => option.value));
setIsIndeterminate(false);
} else {
setSelectedItems([]);
setIsIndeterminate(false);
}
};
const handleItemChange = (event, value) => {
const updatedSelectedItems = selectedItems.includes(value)
? selectedItems.filter((item) => item !== value)
: [...selectedItems, value];
setSelectedItems(updatedSelectedItems);
setIsIndeterminate(
updatedSelectedItems.length > 0 && updatedSelectedItems.length < options.length
);
};
return (
<Box>
<FormControl>
<FormLabel>选择</FormLabel>
<Checkbox
indeterminate={isIndeterminate}
onChange={handleSelectAll}
isChecked={selectedItems.length === options.length}
>
全部
</Checkbox>
</FormControl>
{options.map((option) => (
<FormControl key={option.value}>
<Checkbox
onChange={(event) => handleItemChange(event, option.value)}
isChecked={selectedItems.includes(option.value)}
>
{option.label}
</Checkbox>
</FormControl>
))}
</Box>
);
};
export default CheckboxGroup;
selectedItems
和 isIndeterminate
状态与子复选框的实际选中状态保持同步。handleItemChange
中更新状态时,同时检查并更新 isIndeterminate
状态。react-window
)来优化长列表的渲染性能。通过以上方法和示例代码,你可以轻松实现一个功能齐全且用户友好的“选择全部/部分”复选框组件。
领取专属 10元无门槛券
手把手带您无忧上云