来自 Redux 存储的数据来晚了,所以它不会填满 AG 网格表/反应钩子

Posted

技术标签:

【中文标题】来自 Redux 存储的数据来晚了,所以它不会填满 AG 网格表/反应钩子【英文标题】:Data from Redux store coming late so it doesn't fill AG grid table/ react hook 【发布时间】:2021-11-21 07:23:17 【问题描述】:

我尝试从 redux 存储中获取状态,然后通过 updateData 填充 AG 网格表。

这是我的组件。

const DisplayRules = () => 
    const rules = useSelector((rules) => rules.data);
    const dispatch = useDispatch();
    const [gridApi, setGridApi] = useState(null);
    const [gridColumnApi, setGridColumnApi] = useState(null);
    const [rowData, setRowData] = useState(null);
  
    const onGridReady = (params) => 
      setGridApi(params.api);
      setGridColumnApi(params.columnApi);
  
      const updateData = (data) => 
        setRowData(data);
      ;

      if (rules) 
        updateData(rules);
    ;

    function isFirstColumn(params) 
        var displayedColumns = params.columnApi.getAllDisplayedColumns();
        var thisIsFirstColumn = displayedColumns[0] === params.column;
        return thisIsFirstColumn;
      
    return (
        <div>
            <Typography
                style=marginBottom: '5px'
                component='h5'
                variant='h5'
                align='center'>
                Rule List
            </Typography>
            <div className='ag-theme-material' style=height: '450px'>
                <AgGridReact
                    frameworkComponents=
                        EditSection,
                    
                    defaultColDef=
                        flex: 1,
                        minWidth: 50,
                        resizable: true,
                        headerCheckboxSelection: isFirstColumn,
                        checkboxSelection: isFirstColumn,
                    
                    suppressRowClickSelection=true
                    rowSelection='multiple'
                    onGridReady=onGridReady
                    rowData=rowData                    
                    rowDragManaged=true
                    animateRows=true
                    overlayNoRowsTemplate='There is no rule added yet'
                    overlayLoadingTemplate='Loading..'
                >
                    <AgGridColumn headerName= "Name" field="name" rowDrag=true />                    
                    <AgGridColumn headerName= "Type" field="type"/>
                    <AgGridColumn headerName= "Id" field="id" hide= true suppressToolPanel= true/>
                    <AgGridColumn headerName= "Edit" field="Edit" cellRenderer= 'EditSection' cellRendererParams= 
                    "gridApi": gridApi/>
                </AgGridReact>
            </div>
            <Button
                variant='contained'
                color='primary'
                startIcon=<PreviewIcon />
                onClick=() => 
                    console.log('previewRules');
                >
                Preview
            </Button>
        </div>
    );
;

现在我从商店获得规则,但起初它是空的。然后我在一秒钟后得到它但是行不会在它之后更新。每次规则更改时,我都尝试使用 useEffect 并设置状态(重新渲染组件),但它不起作用。如何解决这个问题?

另外,我希望它在每次编辑部分更改时重新渲染组件。我试图将 setRowData 作为参数传递,但它也不起作用。我也感谢对此提供的任何帮助。谢谢

【问题讨论】:

【参考方案1】:

尝试:

    React.useEffect(() => 
        setRowData(rules);
    , [rules]);

将在每次规则更改时重新呈现。它也应该适用于编辑组件

【讨论】:

【参考方案2】:

你可以这样做

  rowData=rules  

并且 ag-grid 将遵循 redux 状态。真的没有必要在中间使用本地组件状态。

【讨论】:

以上是关于来自 Redux 存储的数据来晚了,所以它不会填满 AG 网格表/反应钩子的主要内容,如果未能解决你的问题,请参考以下文章

新编辑器Cocos Creator发布:对不起我来晚了!

来晚了,秋招五投大厂,成功拿下三家Offer,最终入职美团,分享我的美团1-4面(Java岗)

Redux-Toolkit 和 React Hooks - 存储更改不会触发重新渲染

一鼓作气连八闯关的Android 秋招面经,只是稍稍来迟!!!

如何在 redux 状态更新时自动刷新组件

无状态功能组件方法永远不会从 Redux 存储中获取新数据,但其他方法会这样做