我正在使用React&Material-UI为一个项目中的数据表构建一个带有复选框的筛选选项。我不确定哪种方法是实现这一点的最佳方法。
>
是否有使用Material-UI的自定义解决方案?
如果不是,有什么方法来实现这一点?我是一个新手,所以我很难把所有的碎片放在一起。
这是我得到的东西:
复选框组件:
import "./FilterCheckboxes.css";
import Checkbox from "@material-ui/core/Checkbox";
import FormControlLabel from "@material-ui/core/FormControlLabel";
import FormGroup from "@material-ui/core/FormGroup";
import { createMuiTheme, MuiThemeProvider } from "@material-ui/core/styles";
import React from "react";
import { rows } from "../../store.js";
// Theme Palette Colors
const theme = createMuiTheme({
palette: {
primary: { main: "rgb(38, 118, 198)" }
},
typography: { useNextVariants: true }
});
class FilterCheckboxes extends React.Component {
state = {
checkedA: true,
checkedB: true,
checkedC: false,
checkedD: false,
checkedE: false,
checkedF: false
};
// function to set checkboxes to checked/unchecked
handleChange = name => event => {
this.setState({ [name]: event.target.checked });
};
render() {
return (
<MuiThemeProvider theme={theme}>
<FormGroup>
<div className="filter__checkboxes">
<div className="filter__checkboxes-column">
<div className="checkboxes">
<FormControlLabel
control={
<Checkbox
checked={this.state.checkedA}
color="primary"
onChange={this.handleChange("checkedA")}
value="checkedA"
/>
}
label="Submitted"
/>
</div>
<div className="checkboxes">
<FormControlLabel
control={
<Checkbox
checked={this.state.checkedB}
color="primary"
onChange={this.handleChange("checkedB")}
value="checkedB"
/>
}
label="Invited"
/>
</div>
</div>
<div className="filter__checkboxes-column">
<div className="checkboxes">
<FormControlLabel
control={
<Checkbox
checked={this.state.checkedC}
color="primary"
onChange={this.handleChange("checkedC")}
value="checkedC"
/>
}
label="Not Submitted"
/>
</div>
<div className="checkboxes">
<FormControlLabel
control={
<Checkbox
checked={this.state.checkedD}
color="primary"
onChange={this.handleChange("checkedD")}
value="checkedD"
/>
}
label="Draft"
/>
</div>
</div>
<div className="filter__checkboxes-column">
<div className="checkboxes">
<FormControlLabel
control={
<Checkbox
checked={this.state.checkedE}
color="primary"
onChange={this.handleChange("checkedE")}
value="checkedE"
/>
}
label="Information Request"
/>
</div>
<div className="checkboxes">
<FormControlLabel
control={
<Checkbox
color="primary"
checked={this.state.checkedF}
onChange={this.handleChange("checkedF")}
value="checkedF"
/>
}
label="Loan Application"
/>
</div>
</div>
</div>
</FormGroup>
</MuiThemeProvider>
);
}
}
export default FilterCheckboxes;
表组件:
import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import Table from "@material-ui/core/Table";
import TableBody from "@material-ui/core/TableBody";
import TableCell from "@material-ui/core/TableCell";
import TableHead from "@material-ui/core/TableHead";
import TableRow from "@material-ui/core/TableRow";
import Paper from "@material-ui/core/Paper";
import { rows } from "../../store.js";
const useStyles = makeStyles(theme => ({
root: {
width: "100%",
marginTop: theme.spacing(3),
overflowX: "auto"
},
table: {
minWidth: 650
}
}));
export default function SimpleTable() {
const classes = useStyles();
return (
<Paper className={classes.root}>
<Table className={classes.table}>
<TableHead>
<TableRow>
<TableCell>Name</TableCell>
<TableCell align="left">Status</TableCell>
<TableCell align="left">First Submitted</TableCell>
<TableCell align="left">Last Activity</TableCell>
<TableCell align="left">Score</TableCell>
<TableCell align="left">Actions</TableCell>
</TableRow>
</TableHead>
<TableBody>
{rows.map(row => (
<TableRow key={row.name}>
<TableCell align="left">{row.name}</TableCell>
<TableCell align="left">{row.status}</TableCell>
<TableCell align="left">{row.firstSubmitted}</TableCell>
<TableCell align="left">{row.lastActivity}</TableCell>
<TableCell align="left">{row.score}</TableCell>
<TableCell align="left">{row.actions}</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</Paper>
);
}
您可以在这里找到一个代码示例。
任何帮助在哪种方式构建这个功能将是真正的感激!
一个解决方案可以是将筛选器状态向上移动。这意味着您将filtercheckboxs::onchange
替换为适当的onfilterchange
。我将filtercheckboxs
实现为一个功能组件,因为它没有很多功能。
import React, {Component} from 'react';
const FilterCheckboxes = ({onFilterChanged, checkedA, checkedB, /* ... and so forth or as separate object */}) => {
return (
<MuiThemeProvider theme={theme}>
<FormGroup>
<div className="filter__checkboxes">
<div className="filter__checkboxes-column">
<div className="checkboxes">
<FormControlLabel
control={
<Checkbox
checked={checkedA}
color="primary"
onChange={onFilterChanged("checkedA")}
value="checkedA"
/>
}
label="Submitted"
/>
</div>
{/* your other checkboxes */}
</div>
</div>
</FormGroup>
</MuiThemeProvider>
);
}
您的simpletable
几乎保持不变。唯一的变化是它得到了行作为道具:
export default function SimpleTable({rows}) {
// your code stays the same except the import of 'store.js'
}
现在是包装它的组件。它具有filters
状态和您的行数据。合并这两个以筛选表:
const FilterTable = () => {
const [filters, setFilters] = React.useState({});
const filteredRows = rows.filter((row) => {
const filterArray = Object.keys(filters);
return filterArray.every((filterKey) => {
return row[filterKey] == filters[filterKey];
});
});
return <SimpleTable rows={filteredRows} />
}
我一直在研究这个问题,但我找不到一个带有复选框的get drawable的解决方案。我试图做的是,当你点击这个特定的复选框时,它会过滤相应颜色的复选框。顺便说一下,这是一个片段。所以,我有可以是红色、黄色或绿色的复选框。如果用户点击它们,它会改变颜色。例如,我有一个黄色的复选框,它是chkProgress,当它被单击时,我想找到所有黄色的复选框,并筛选黄色的复选框。所以,我有可绘制的ID,我需要得
问题内容: 我需要将复选框添加到JTree。自定义TreeCellRenderer / TreeCellEditor似乎是正确的方法。到目前为止,我在此网页中使用了CheckBoxNodeRenderer方法。除了两件事,它可以正常工作: 复选框上方+下方有额外的空格;我想使其与常规JTree相同。 我想区分单击复选框本身(应尝试切换复选框)和单击与复选框相关联的文本(应允许事件侦听器将此解释为单
问题内容: 是否可以将复选框代替“链接名称”? 如果是这样怎么办? 谢谢, 问题答案: 是的,当然有可能。您可以使用标准复选框: 然后在单独的javascript文件中使用jQuery订阅此复选框的change事件,并毫不客气地对其进行AJAXify:
问题内容: 我有两行复选框。当用户单击任何单个复选框(在特定行中)时,我想在PHP的总和中添加一个数字。如果他取消选择单个复选框,那么我想实时地从总数中减去而不刷新页面。 我的问题是我的AJAX调用的数据字段中有什么内容? 这是正确的方法吗? HTML JQUERY PHP 问题答案: 尝试:
问题内容: 我正在尝试建立一个查询,该查询将找到所有用户文档(docType =用户),然后根据许多过滤器对其进行过滤。例如位置,性别,年龄等。过滤器是根据我正在构建的搜索功能上的用户输入来添加/删除的。 以下没有结果: 以下返回结果: 后者虽然返回结果,但从长远来看是行不通的,因为我可能想为年龄,性别等添加一个额外的过滤器,而且我似乎无法添加多个字段。如果我删除位置过滤器,则第一个查询有效。 问