Как передать ref через массив в forwardRef в машинописном тексте и отреагировать? - PullRequest
0 голосов
/ 16 июня 2020

У меня есть пример, который я создал в коде. Таблица отображается с помощью th, но в моей среде IDE машинописный текст жалуется на тип в этой строке:

<TH handleSort={handleSort} ref={refsTh[ind]}>

--- Тип ошибки 'MutableRefObject' не может быть присвоен типу '((instance: HTMLTableHeaderCellElement | null ) => недействительно) | RefObject | null | undefined '. Тип MutableRefObject нельзя присвоить типу RefObject. «Текущие» типы собственности несовместимы. Тип «unknown» нельзя присвоить типу «HTMLTableHeaderCellElement | ноль'. Тип «unknown» не может быть назначен типу «HTMLTableHeaderCellElement».

Я заставил этот пример работать, когда не передается массив, а вместо него передается одна ссылка. Проблема, похоже, в том, что я динамически создаю useRef внутри массива. Кто-нибудь может посоветовать? Спасибо

пример кода: https://codepen.io/inspiraller/pen/OJMRZWQ

// import React from 'react';

// ######################################
type shapeTH = {
  handleSort: () => void,
  children: React.ReactNode // BUG: can't pass children any other way to forwardRef
};

type Ref = HTMLTableHeaderCellElement | null;

const TH = React.forwardRef<Ref, shapeTH>(
  ({children, handleSort}, ref) => (
    <th ref={ref} onClick={handleSort}>
      <span className="thSpan">{children}</span>
    </th>
  )
);

// const TH:React.FC<shapeTH> = ({children, handleSort}) => (
//   <th onClick={handleSort}>
//     <span className="thSpan">{children}</span>
//   </th>
// );

// ##################################################

const App:React.FC = () => {
  const arrTh=['id', 'name', 'colour'];

  type shapeRef = ReturnType<typeof React.useRef>;

  const refsTh: Array<shapeRef> = arrTh.map(() => (
    React.useRef<HTMLTableHeaderCellElement>(null)
  ));
  const handleSort: shapeTH['handleSort'] = () => {};
  return (
    <table className="tableGeneric">
      <thead>
        <tr>
          {
            arrTh.map((item, ind) => (
              <TH handleSort={handleSort} ref={refsTh[ind]}>
                {item}
              </TH>
            ))
          }
        </tr>
      </thead>
    </table>
  );
};

// export default App;

ReactDOM.render(
  <App/>,
  document.getElementById('app')
);


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...