#reactjs #typescript #react-dnd #react-data-grid
#reactjs #typescript #react-dnd #react-data-grid
Вопрос:
Существует пакет под названием react-data-grid . И в этом конкретном пакете есть таблица примеров, но код написан на TypeScript, а также документы для этой конкретной версии отсутствуют. Я попытался преобразовать typescript в React. Все было хорошо, пока я не захотел реализовать перетаскивание. Возникает какая-то ошибка, и я думаю, что эта ошибка связана с тем, что я импортирую что-то неправильно. Можете ли вы сказать мне, где я делаю что-то не так? Вот ссылка на песочницу. Возникает ошибка в моей локальной сборке RowRender.js в строке номер 44. Я также включил туда файл typescript. Вы также можете увидеть ошибку, если просто раскомментируете строку 72-74 из App.js компонент в песочнице.
Комментарии:
1. можете ли вы поделиться сообщением об ошибке? Спасибо
2. ошибка RowRenderer.js в строке 44. И в нем говорится
TypeError: Object(...) is not a function
Ответ №1:
- Переименуйте файл .ts в файл .tsx. В другом случае TypeScript не поймет
<div>
<Row>
и другие элементы react - Обновите свой импорт в отношении react-data-grid до:
import { Row, RowRendererProps } from "react-data-grid";
- Обновите свой импорт
import { useCombinedRefs } from ...
, чтобы извлечь хук из правильного места. - Если вы увидите ошибку, касающуюся импорта по умолчанию для React — измените
import React from 'react'
import * as React from "react";
или обновитеtsconfig
для поддержки синтетического импорта
useCombinedRefs
— это внутренняя функция, которая не экспортируется, поэтому вы не можете использовать ее напрямую. Вариант № 1 — напишите его самостоятельно. Вариант № 2 найдите причину, по которой вы пытаетесь использовать внутреннюю функцию. Должен быть лучший способ.
function useCombinedRefs(...refs) {
return useCallback(handle => {
for (const ref of refs) {
if (typeof ref === 'function') {
ref(handle);
} else if (ref !== null) {
ref.current = handle;
}
}
}, refs);
}
Комментарии:
1. Спасибо за помощь, но проблема все еще существует. Я предоставил файл typescript только потому, что я конвертирую код в React из него. Он не включен в код (т.Е. Он есть только для справки). Я не использую RowRenderedProps нигде в коде react. И я не могу понять, откуда они экспортируют useCombinedRefs. Поэтому я думаю, что я импортирую их worn. Не могли бы вы предоставить точную инструкцию импорта для useCombinedRefs.
2. Где вы брали
useCombinedRefs
раньше?3. Я конвертирую из файла typescript, который использует тот же пакет. Они использовали там imports(
import { useCombinedRefs } from '../../../../src/hooks';
)(см. rowRendere.tsx в песочнице). Как мне его импортировать. Vs code не дает рекомендаций.4. Это должно сработать
import { useCombinedRefs } from 'react-data-grid/lib/hooks';
5. Привет. Спасибо за помощь. Оказывается, когда я использую эту внутреннюю функцию, код работает.