#reactjs #typescript
Вопрос:
Я использую react. Я создал компонент портала. Когда я включаю модал в портал, я получаю следующую ошибку в VSCode. Если кто-нибудь знает, как это исправить, пожалуйста, дайте мне знать.
Описание ошибки
Type '{ children: Element[]; }' is not assignable to type 'IntrinsicAttributes amp; ReactNode'.
Type '{ children: Element[]; }' has no properties in common with type 'IntrinsicAttributes'.ts(2322)
// portal.tsx
import ReactDOM from 'react-dom';
import React from 'react';
export const Portal = (children: React.ReactNode) => {
const el = document.getElementById('portal');
return ReactDOM.createPortal(children, el);
};
<Portal>
<Overlay/>
<Modal
padding={padding}
width={width}
height={height}
radius={radius}
overflowY={overflowY}
>
{children}
</Modal>
</Portal>
Ответ №1:
createPortal
получите один узел React, поэтому вам нужно будет обернуть его внутри другого <></>
(React.Фрагмент):
Это createPortal
тип:
export function createPortal(
children: ReactNode,
container: Element,
key?: null | string
): ReactPortal;
Поэтому вам нужно будет изменить свой код на:
<Portal>
<>
<Overlay />
<Modal
padding={padding}
width={width}
height={height}
radius={radius}
overflowY={overflowY}
>
{children}
</Modal>
</>
</Portal>;
И в вашем portal.tsx
export const Portal: React.FunctionComponent<React.ReactNode> = ({
children
}) => {
const el = document.getElementById("portal");
if (el) return ReactDOM.createPortal(children, el);
return null;
};
Рабочий Пример:
Комментарии:
1. Я добавил функцию экспорта createPortal в Portal.tsx, но произошла ошибка. Содержание ошибки Реализация функции отсутствует или не сразу после объявления.ts(23) Не удается найти имя 'ReactPortal'.ts(2304)
2. Нет, нет,
createPortal
это только тип, который я поместил туда для уточнения, вам не нужно копировать его в свой код.3. Просто заверните своих детей в <><></> внутри вашего
<Portal>
4. Я вложил его в <><></>, но ошибка не исчезла.
5. Могу ли я получить доступ к вашему решению?