Add a comment (a note) to a cell, using the right-click context menu, just like in Excel. Edit and delete comments. Make comments read-only.
Enable the plugin Set the comments configuration option to true to enable the feature and add all the needed context menu items. For example:
After you've enabled the plugin, the Context Menu gains a few new items:
Add/Edit comment Delete comment Read-only comment You can also pre-define comments for your table. Comments are stored in the table's/column's/cell's metadata object and can be declared as any value of that type. For example:
In this example, the comment "Hello world!" is added to the cell at (1,1).
Basic example
By default, all comments are editable. To change this, set the readOnly configuration option to true when adding a comment. This example makes the "Tesla" comment attached to a cell read-only, whereas the "Honda" comment attached to another cell is editable.
import { HotTable } from '@handsontable/react';
import { registerAllModules } from 'handsontable/registry';
import 'handsontable/dist/handsontable.full.min.css';
// register Handsontable's modules
registerAllModules();
export const ExampleComponent = () => {
return (
<HotTable
data={[
['', 'Tesla', 'Toyota', 'Honda', 'Ford'],
['2018', 10, 11, 12, 13, 15, 16],
['2019', 10, 11, 12, 13, 15, 16],
['2020', 10, 11, 12, 13, 15, 16],
]}
rowHeaders={true}
colHeaders={true}
contextMenu={true}
comments={true}
cell={[
{ row: 0, col: 1, comment: { value: 'A read-only comment.', readOnly: true } },
{ row: 0, col: 3, comment: { value: 'You can edit this comment' } }
]}
height="auto"
licenseKey="non-commercial-and-evaluation"
/>
);
};
ReactDOM.render(<ExampleComponent />, document.getElementById('example2'));
<script src="https://cdn.jsdelivr.net/npm/handsontable@12.2/dist/handsontable.full.min.js"></script>
<link type="text/css" rel="stylesheet" href="https://cdn.jsdelivr.net/npm/handsontable@12.2/dist/handsontable.full.min.css" />
<script src="https://cdn.jsdelivr.net/npm/react@17/umd/react.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/react-dom@17/umd/react-dom.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@handsontable/react@12.2/dist/react-handsontable.js"></script>
<script src="https://handsontable.com/docs/12.2/scripts/fixer.js"></script>
<div id="example2" class="hot "></div>
To set the width and height of a comment box, use the style parameter.
import { HotTable } from '@handsontable/react';
import { registerAllModules } from 'handsontable/registry';
import 'handsontable/dist/handsontable.full.min.css';
// register Handsontable's modules
registerAllModules();
export const ExampleComponent = () => {
return (
<HotTable
data={[
['', 'Tesla', 'Nissan', 'Toyota', 'Honda', 'Mazda', 'Ford'],
['2017', 10, 11, 12, 13, 15, 16],
['2018', 10, 11, 12, 13, 15, 16],
['2019', 10, 11, 12, 13, 15, 16],
]}
rowHeaders={true}
colHeaders={true}
contextMenu={true}
comments={true}
cell={[
{ row: 1, col: 1, comment: { value: 'Some comment' } },
// add the `style` parameter
{ row: 2, col: 2, comment: { value: 'Comment 200x50 px', style: { width: 200, height: 50 } } }
]}
height="auto"
licenseKey="non-commercial-and-evaluation"
/>
);
};
ReactDOM.render(<ExampleComponent />, document.getElementById('example3'));
<script src="https://cdn.jsdelivr.net/npm/handsontable@12.2/dist/handsontable.full.min.js"></script>
<link type="text/css" rel="stylesheet" href="https://cdn.jsdelivr.net/npm/handsontable@12.2/dist/handsontable.full.min.css" />
<script src="https://cdn.jsdelivr.net/npm/react@17/umd/react.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/react-dom@17/umd/react-dom.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@handsontable/react@12.2/dist/react-handsontable.js"></script>
<script src="https://handsontable.com/docs/12.2/scripts/fixer.js"></script>
<div id="example3" class="hot "></div>
To display comments after a pre-configured time delay, use the displayDelay parameter.
import { HotTable } from '@handsontable/react';
import { registerAllModules } from 'handsontable/registry';
import 'handsontable/dist/handsontable.full.min.css';
// register Handsontable's modules
registerAllModules();
export const ExampleComponent = () => {
return (
<HotTable
data={[
['', 'Tesla', 'Toyota', 'Honda', 'Ford'],
['2018', 10, 11, 12, 13, 15, 16],
['2019', 10, 11, 12, 13, 15, 16],
['2020', 10, 11, 12, 13, 15, 16],
]}
rowHeaders={true}
colHeaders={true}
contextMenu={true}
comments={{
// on mouseover, wait 2 seconds before the comment box displays
displayDelay: 2000,
}}
cell={[
{ row: 1, col: 1, comment: { value: 'Some comment' } },
]}
height="auto"
licenseKey="non-commercial-and-evaluation"
/>
);
};
ReactDOM.render(<ExampleComponent />, document.getElementById('example4'));
<script src="https://cdn.jsdelivr.net/npm/handsontable@12.2/dist/handsontable.full.min.js"></script>
<link type="text/css" rel="stylesheet" href="https://cdn.jsdelivr.net/npm/handsontable@12.2/dist/handsontable.full.min.css" />
<script src="https://cdn.jsdelivr.net/npm/react@17/umd/react.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/react-dom@17/umd/react-dom.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@handsontable/react@12.2/dist/react-handsontable.js"></script>
<script src="https://handsontable.com/docs/12.2/scripts/fixer.js"></script>
<div id="example4" class="hot "></div>
Last update: Nov 20, 2024