Я сам никогда не использовал Tabulator, но переход от подхода на основе jQuery к React в основном сводит на нет то, как вы думаете о вещах. В React вы берете данные (состояние) и визуализируете свое представление на основе этих данных (снова, снова и снова - каждый раз, когда данные изменяются). Таким образом, вместо вызова функции добавления строк в самом Tabulator (как вы сделали в примере выше), вы изменяете данные (добавляя строку непосредственно к нему), что, в свою очередь, вызывает повторную визуализацию компонента Tabulator с новым row.
Итак, пусть код говорит, я полагаю.
Сначала вам нужно сохранить данные в состоянии вашего компонента:
// here we initialize your data state with empty array
// and define setData function that will be used to update 'data'
const [data, setData] = useState([]);
// here we fetch the data from somewhere,
// before your component is mounted for the first time
useEffect(() => {
// let's say we fetch it using fetch()
const remoteData = await fetch(...);
// we set the data to what we fetched using setData;
// that causes component to re-render;
// doing data = remoteData does not trigger re-rendering
setData(remoteData);
},[]);
// this sample assumes that the fetch operation is triggered only once, at startup,
// so that's why empty array is passed as second parameter to useEffect
А теперь мы можем внести изменения в эти данные, чтобы табулятор отображал их после добавления новой строки.
// we define click handler for the button
const addRowClickHandler = (event) => {
// we're setting new value of the data array,
// which is current content of the array plus new empty object;
// the reason why we do it this way (by making the copy of original data)
// is because re-rendering is based on detecting the change in the data object;
// comparison utilizes shallow equality so even after adding new element
// with push() data===data still returns true
setData([...data,{}]);
}
Теперь ваше представление должно выглядеть так:
<div>
<button id="add-row" onClick={addRowClickHandler}>Add Row</button>
</div>
<ReactTabulator
columns={editableColumns}
data={data}
footerElement={<span><a href="https://www.github.com/" target="_blank">Find Me On Github</a></span>}
options={options}
/>
Удачного кодирования и дайте мне знать если это работает;)