reactjs - 如何将ag-grid-react包装到组件中?

标签 reactjs redux ag-grid-react

我正在使用 React 和 Redux。我有一张用 ag-grid 制作的用于 react 的 table 。 表格数据可以在线编辑并保存。

如何为该表创建包装组件?我需要有多个具有相同功能但数据不同的表。

在农业网格中documentation它展示了如何使用 redux 存储和化简器来实现,但该解决方案仅适用于一张表,因为每个应用程序只有一个状态。我不想仅仅因为我有两个不同的数据列表而重复我的代码...

最佳答案

这是一个简单的示例

// Grid.jsx
import React, {
    PureComponent,
} from 'react';

import {
    AgGridReact,
} from 'ag-grid-react';

class Grid extends PureComponent {
    state = {
        columnDefs : [],
        rowData : []
    };


    /**
     * This will set your internal columnDefs & rowData
     * from the props being passed in
     * <Grid columnDefs={columnDefs} rowData={rowData} />
     */

    static getDerivedStateFromProps(nextProps) {

        const {
            columnDefs,
            rowData,
        } = nextProps;

        return {
            columnDefs,
            rowData,
        };
    }

    render() {
        const {
            columnDefs,
            rowData,
        } = this.state;

        return (

            <AgGridReact
                columnDefs={columnDefs}
                rowData={rowData}

            />
        );
    }
}

export default Grid;

// ExampleImpl.jsx
import Grid from './Grid';
class ExampleImpl extends PureComponent {
    render() {
        // Assuming you got these from the connect
        const rowData: [
            {
              name: "Ireland",
              continent: "Europe",
              language: "English",
              code: "ie",
              population: 4000000,
              summary: "Master Drinkers"
            },
          ];
        const columnDefs: [
            {
              headerName: "Name",
              field: "name",
              cellRenderer: countryCellRenderer
            },
            {
              headerName: "Continent",
              field: "continent",
              width: 150
            },

            {
              headerName: "Language",
              field: "language",
              width: 150
            }
        ];
        return <Grid
            rowData = {rowData}
            columnDefs = {columnDefs}
        />
    }
}

export default connect(ExampleImpl);

// ExampleImplII.jsx
import Grid from './Grid';
class ExampleImplII extends PureComponent {
    render() {
        // Assuming you got these from connect
        const rowData: [
            {
              name: "Ireland",
              continent: "Europe",
              language: "English",
              code: "ie",
              population: 4000000,
              summary: "Master Drinkers"
            },
          ];
        const columnDefs: [
            {
              headerName: "Name",
              field: "name",
              cellRenderer: countryCellRenderer
            },
            {
              headerName: "Continent",
              field: "continent",
              width: 150
            },
            {
              headerName: "Language",
              field: "language",
              width: 150
            }
        ];
        return <Grid
            rowData={rowData}
            columnDefs={columnDefs}
        />
    }
}

export default connect(ExampleImplII);

这样,您就有 1 个演示组件和 2 个容器组件(智能组件),它们知道如何获取数据并将其传递给演示组件。

关于reactjs - 如何将ag-grid-react包装到组件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51541065/

相关文章:

reactjs - 用 Jest 测试 Sentry

javascript - React setstate 采用以前的值

reactjs - 使用 Redux 响应热重载

javascript - redux reducer 返回 'defaultState'安全吗?

javascript - 如何在 react 前端显示 Google Passport oAuth 同意屏幕,而不是使用快速 View 模板

node.js - ReactJS-警告 : Unknown prop

javascript - 如何用 react/redux 柯里化(Currying)调度函数?

reactjs - 使用 ag 网格 react 功能组件无法通过上下文调用父函数

ag-grid-react - 如何更改复选框颜色?股份公司网格

reactjs - 对行进行排序后,Ag-grid 拖放不起作用