- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望根据与该行关联的 props.data
对象中可用的其他数据以某种方式呈现单元格。但我不知道当其他数据发生变化时如何让单元格重新渲染。
我有一个非常简单的数据结构,我试图在 ag-grid 中显示,基本上是一个属性数组,每个属性都有一个名称、一个值和一个 isLoading 标志,指示该属性是否正在更新(例如可能会发生后台刷新,网格单元中的数据是只读的)。
我希望网格显示名称和值列,并且如果 isLoading == true
,我希望值列显示微调器图标。
我正在尝试为此构建一个自定义单元格渲染器,但单元格仅在值更改时重新渲染,而不是在 isLoading 标志更改时重新渲染。
在我的代码流程中,isLoading 标志设置为 true,然后更新该值。这会触发渲染方法,单元格现在将显示更新的值和加载微调器。然后 isLoading 标志设置为 false,但不会再次调用 render 方法,因此单元格继续显示加载微调器。
所以我的问题是,如何让 cellrenderer 响应 props.data
中的更改,这些更改不适用于其显示值的字段?在这种情况下,当 props.data.isLoading
标志更改时,我需要重新渲染单元格。
我正在使用带有react和redux的ag-grid v17(并尝试 typescript )。
我的代码看起来与此处的示例非常相似:https://www.ag-grid.com/react-redux-integration-pt1/
在此示例中,我的单元格渲染器是根据货币渲染器构建的:https://www.ag-grid.com/javascript-grid-cell-rendering-components/#example-rendering-using-react-components
注意:我将网格的 deltaRowDataMode 设置为 true,因此它仅重新渲染已更改的数据。
这是我的列定义:
{
colId: 'value',
headerName: 'Value',
field: 'value', //the property's value on my data structure
cellRendererFramework: MyCellRenderer
}
这是我的单元格渲染器:
import React from 'react';
import { ICellRendererParams } from 'ag-grid';
interface RendererState {
currentValue: string;
isLoading: boolean;
}
export class MyCellRenderer extends React.Component<ICellRendererParams, RendererState> {
constructor(props: ICellRendererParams) {
super(props);
this.state = { currentValue: props.data.value, isLoading: props.data.isLoading };
}
//refresh is only called when the value changes, not when params.data.isLoading changes, so render does not get called
refresh(params: ICellRendererParams) {
if (params.value !== this.state.currentValue) {
this.setState({ currentValue: params.value });
}
if (params.data.isLoading !== this.state.isLoading) {
this.setState({ isLoading: params.data.isLoading });
}
return true;
}
render() {
var loadingStyle = {
display: (this.state.isLoading) ? '' : 'none'
};
return (
<div>
{this.state.currentValue}
<div className="pull-right">
<span className="fa fa-refresh fa-spin" style={loadingStyle}></span>
</div>
</div>
);
}
}
这也可以使用单元格类或样式,但我也希望能够以类似的方式处理其他事情,例如拥有带有按钮的单元格渲染器,并禁用该按钮如果 isLoading 为 true。
更新:
此处添加了一个工作示例:https://react-owixbq.stackblitz.io/
最佳答案
尝试使用componentWillReceiveProps,而不是在refresh()中更新状态.
componentWillReceiveProps(nextProps){
if(nextProps.data.yourField !== this.props.data.yourField){
this.setState({ isLoading: false, currentValue: nextProps.data.yourField });
}
}
关于ag-grid CellRenderer - 当其他行数据(props.data)更改时如何渲染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49330393/
如何在特定行中添加特定组件(例如复选框、输入、选择、下拉组件)?每当我将一个组件添加到列中时,它就会出现在每一行中。如何从特定行中删除组件? this.columnDefs1 = [ {
我加了 ag-grid到我的 Angular 项目。然后我将其 CSS 导入 styles.css . @import "~@ag-grid-community/all-modules/dist/st
在我的农业网格的每一行中。我需要在每一行 ag-grid 中添加 Angular Material 图标按钮。但是,结果只显示了文本按钮。它不会在我的农业网格中显示我的图标按钮。 接下来,我需要在我的
我最近开始使用“ag”命令而不是“ack”。 Ag 快得多,但似乎没有可以添加配置选项的文件(例如 .ackrc)。 例如,我总是希望使用寻呼机,而且我不想总是输入: ag --pager "less
这在列很多且大部分不在可视区域的场景中尤为重要。 最佳答案 是的,如 documentation 中所述, By default the grid uses virtualisation; a tec
这在列很多且大部分不在可视区域的场景中尤为重要。 最佳答案 是的,如 documentation 中所述, By default the grid uses virtualisation; a tec
AgGrid 日期筛选器的格式是mm/dd/yyyy,但我想将其更改为yyyy/mm/dd 我该怎么做?日期过滤器是网格的 columnDefinition 的一部分,我在其中使用 filter: '
我有一个基本的 ag-grid 和一些简单的虚拟数据,但它只在我不导入库提供的 .css 文件时显示,即使这样它也显示不正确。 摘 self 的 package.json: "ag-grid": "1
我有一个标准的单元格编辑器,当我处于编辑模式时,单元格编辑器的宽度和高度不是单元格的完整宽度和高度。 我应该覆盖样式还是配置中有任何标志可以关闭此效果? 最佳答案 我有同样的问题。如果您查看 DOM,
我爱 ag :: the_silver_searcher 但我想知道如何以非递归方式执行搜索。 有时我只想从我的主目录中搜索内部文件,但不查看子目录。 最佳答案 检查手册中的深度选项: --depth
概览 以前在 ag-grid 版本 <10.1.0 中,可以通过这种方式在不刷新网格的情况下添加一行: let model: IRowModel = this.gridOptions.api.getM
每当我尝试在数据透视模式下从 ag 网格导出数据时,列标签行不包含在导出文件中。 import { AgGridVue } from "ag-grid-vue"; import "ag-grid-e
单击行按钮后,我希望能够在我的主 ag 网格中打开另一个 ag 网格(子网格)。但是,在论坛和 ag-grid 文档中搜索了几个小时后,我似乎无法找到一种使子网格出现的方法。这是我希望我的网格如何表现
我能够将所有配置的可编辑列设置为可编辑但在焦点上,其他单元格更改为查看模式。 访问以下链接并单击开始编辑,所有单元格将更改为编辑模式。然后在单元格中开始编辑(打字)。现在不同行中的其他可编辑单元格将更
我正在使用ag-grid来显示和修改数据。如何在孔ag-grid的可编辑和不可编辑之间切换。我可以使用 grid api 来做到这一点吗? 这是我的默认配置: this.defaultDefs = {
我想使用以下选项为 ag-grid 选择复选框: 但是没有看到左边的复选框。知道还需要什么设置才能使选择复选框起作用。 self.appliancesInGroupGridOpts = {
是否有可能总是在 ag-grid 中显示水平滚动条? ?这个问题被问为 an issue on their GitHub page , 但他们似乎忽略了它(据我所知,它不是在 their own is
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 2 年前。 Improve t
我正在尝试使用一个复杂的对象来对我的 ag 网格行进行分组。我的 rowdata 对象看起来像这样 - const rowData= { id : '123', name: 'dummy',
是否有从 ag-grid 列菜单中删除第一个菜单的选项?我指的是带有“pinSubMenu”、“valueAggSubMenu”、“autoSizeThis”等的菜单。 我想打开上下文菜单,首先查看过
我是一名优秀的程序员,十分优秀!