CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-handsontable--react

React class-based wrapper component for Handsontable data grid with spreadsheet-like functionality

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

table-component.mddocs/

Table Component

The HotTable component is the main data grid component that wraps Handsontable functionality with React lifecycle integration and prop-based configuration.

Capabilities

HotTable Component

Main wrapper component that creates and manages the Handsontable instance with React integration.

/**
 * Main Handsontable React component
 * @param props - Component props extending Handsontable settings
 * @param ref - Forward ref to HotTableClass instance
 */
const HotTable: ForwardRefExoticComponent<HotTableProps & RefAttributes<HotTableClass>>;

interface HotTableProps extends Handsontable.GridSettings {
  /** Component DOM element ID */
  id?: string;
  /** CSS class name for the component */
  className?: string;
  /** Inline styles for the component */
  style?: React.CSSProperties;
  /** Handsontable settings object override */
  settings?: Handsontable.GridSettings;
  /** Child components (HotColumn, custom renderers/editors) */
  children?: React.ReactNode;
}

Static Properties:

/** Package version number */
HotTable.version: string;

Usage Examples:

import React, { useRef } from 'react';
import { HotTable } from '@handsontable/react';
import { registerAllModules } from 'handsontable/registry';

registerAllModules();

// Basic usage with data array
function BasicTable() {
  const data = [
    ['A1', 'B1', 'C1'],
    ['A2', 'B2', 'C2'],
    ['A3', 'B3', 'C3']
  ];

  return (
    <HotTable
      data={data}
      colHeaders={true}
      rowHeaders={true}
      width="600"
      height="300"
      licenseKey="non-commercial-and-evaluation"
    />
  );
}

// Usage with ref for imperative API access
function TableWithRef() {
  const hotTableRef = useRef<HotTableClass>(null);

  const handleGetData = () => {
    if (hotTableRef.current?.hotInstance) {
      const data = hotTableRef.current.hotInstance.getData();
      console.log('Table data:', data);
    }
  };

  return (
    <div>
      <HotTable
        ref={hotTableRef}
        data={[['Sample', 'Data']]}
        colHeaders={['Column 1', 'Column 2']}
        licenseKey="non-commercial-and-evaluation"
      />
      <button onClick={handleGetData}>Get Data</button>
    </div>
  );
}

// Usage with custom styling and configuration
function StyledTable() {
  const settings = {
    contextMenu: true,
    manualRowResize: true,
    manualColumnResize: true,
    filters: true,
    columnSorting: true
  };

  return (
    <HotTable
      data={[]}
      startRows={10}
      startCols={5}
      colHeaders={true}
      rowHeaders={true}
      className="custom-hot-table"
      style={{ border: '1px solid #ccc' }}
      settings={settings}
      licenseKey="non-commercial-and-evaluation"
    />
  );
}

HotTableClass

The underlying class component that manages the Handsontable instance and React integration.

class HotTableClass extends React.Component<HotTableProps, {}> {
  /** Reference to the Handsontable instance */
  get hotInstance(): Handsontable | null;
  
  /** Setter for the Handsontable instance */
  set hotInstance(hotInstance: Handsontable);
  
  /** Component DOM element ID */
  id: string;
  
  /** Reference to main Handsontable DOM element */
  hotElementRef: HTMLElement;
  
  /** Class name added to the component DOM element */
  className: string;
  
  /** Style object passed to the component */
  style: React.CSSProperties;
  
  /** Array of column settings from HotColumn components */
  columnSettings: Handsontable.ColumnSettings[];
  
  /** Package version getter */
  static get version(): string;
}

Instance Methods

Methods available on HotTableClass instances for managing caches and accessing internal state.

/**
 * Get the portal container cache used for component rendering
 * @returns Map of portal containers keyed by unique identifiers
 */
getPortalContainerCache(): Map<string, HTMLElement>;

/**
 * Get the rendered cell cache for performance optimization  
 * @returns Map of cached cell elements keyed by row-col coordinates
 */
getRenderedCellCache(): Map<string, HTMLTableCellElement>;

/**
 * Get the editor cache for component-based editors
 * @returns Nested map of editor components organized by class and scope
 */
getEditorCache(): HotEditorCache;

/**
 * Clear both renderer and editor caches
 * Typically called during component updates
 */
clearCache(): void;

/**
 * Get the Document object corresponding to the main component element
 * @returns Document object or null in SSR environments
 */
getOwnerDocument(): Document | null;

/**
 * Create a renderer wrapper function for React renderer components
 * @param rendererElement - React renderer component element
 * @returns Handsontable-compatible renderer function
 */
getRendererWrapper(rendererElement: React.ReactElement): typeof Handsontable.renderers.BaseRenderer;

/**
 * Create an editor class for React editor components
 * @param editorElement - React editor component element
 * @param editorColumnScope - Column scope identifier (defaults to 'global')
 * @returns Handsontable-compatible editor class
 */
getEditorClass(
  editorElement: HotEditorElement, 
  editorColumnScope?: EditorScopeIdentifier
): typeof Handsontable.editors.BaseEditor;

/**
 * Set column settings from HotColumn components
 * @param columnSettings - Column configuration object
 * @param columnIndex - Zero-based column index
 */
setHotColumnSettings(columnSettings: Handsontable.ColumnSettings, columnIndex: number): void;

Prop Integration

All Handsontable configuration options are supported as props on the HotTable component:

// Common Handsontable props
<HotTable
  data={data}                    // Data source
  dataSchema={schema}            // Data schema for new rows
  colHeaders={true}              // Column headers
  rowHeaders={true}              // Row headers
  width={800}                    // Table width
  height={400}                   // Table height
  stretchH="all"                 // Column stretching
  contextMenu={true}             // Right-click menu
  manualRowResize={true}         // Row resizing
  manualColumnResize={true}      // Column resizing
  columnSorting={true}           // Column sorting
  filters={true}                 // Column filtering
  readOnly={false}               // Edit mode
  licenseKey="non-commercial-and-evaluation"
/>

The component automatically converts React props to Handsontable settings and handles prop updates through the component lifecycle.

docs

column-configuration.md

custom-editors.md

index.md

table-component.md

tile.json