Может ли кто-нибудь помочь мне преобразовать код typescript в код React

#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. Привет. Спасибо за помощь. Оказывается, когда я использую эту внутреннюю функцию, код работает.