reactjs - React 表正在按过滤器排序
问题描述
我正在为我的项目创建一个网格,我需要在其中实现列过滤。我已经完成了大部分工作,但面临一个问题,即每当我单击 ID 列的过滤器输入框时,该列都会被排序。我尝试过使用e.stopPropagation()
,但这不起作用。
我的代码库的工作副本可以在https://4hz20.csb.app/找到,代码在https://codesandbox.io/s/data-table-forked-4hz20
列过滤器.js
import React from "react";
import styled from "styled-components";
const Input = styled.input`
width: 144px;
margin: 8px 0;
padding: 12px;
border: solid 1px #c2c3c9;
background-color: #ffffff;
`;
export const ColumnFilter = ({ column }) => {
const { filterValue, setFilter } = column;
return (
<Input
value={filterValue || ""}
onChange={(e) => {
e.stopPropagation();
setFilter(e.target.value);
return false;
}}
placeholder="Search"
/>
);
};
另外我正在使用manualFilters: true
,manualSortBy: true
并且manualPagination: true
因为我想在服务器端处理它们,但是手动排序和手动过滤器似乎不能一起工作,请参阅DataGrid.js
第 37-39 行。
解决方案
我将代码从
<th scope="col" {...column.getHeaderProps(column.getSortByToggleProps())}>
{column.render("Header")}
<span>
{column.disableSortBy ? "" : column.isSorted n? column.isSortedDesc ? " " : " " : " ⇵"}
</span>
<div>
{column.canFilter ? column.render("Filter") : null}
</div>
</th>
至
<th scope="col">
<div {...column.getHeaderProps(column.getSortByToggleProps())}>
{column.render("Header")}
<span>
{column.disableSortBy ? "" : column.isSorted n? column.isSortedDesc ? " " : " " : " ⇵"}
</span>
</div>
<div>
{column.canFilter ? column.render("Filter") : null}
</div>
</th>
将所需元素包装在 div 中并传递{...column.getHeaderProps(column.getSortByToggleProps())}
给它。
推荐阅读
- c++ - “unsigned char *”类型的参数与“const char *”类型的参数不兼容
- database - 只读连接derby sql
- python-3.x - 如何在opencv python3中读取boto3文件对象
- javascript - 在具有不同扩展名的文本文件中检索文本数据的 AJAX 调用失败 (404)
- solr - SOLR Tokenizer“solr.SimplePatternSplitTokenizerFactory”在意外字符处拆分
- unit-testing - Spring Boot 中的存储库测试导致未知实体异常
- c++ - 如何在 C++ 类中使用自引用类型和使用别名
- ios - 向 URL 添加参数(来自路径的资源,WKWebView)
- angular - 角度为 7 的具有多个 TemplateRef 的表
- protractor - Protractor-Cucumber 测试执行顺序