Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

156
Visualizações
ReactDOM.render no es un elemento de representación creado a través de React.createElement

Creé un componente modal que utiliza el contexto de React y enlaces para facilitar su uso. Pero por alguna razón, el elemento que quiero representar en el modal no aparece.

Aquí está mi código para ModalContainer que contiene el proveedor y el modal

ModalContainer.tsx

 export type ModalElement = | React.ComponentClass<any, any> | React.FC<any> | JSX.Element; const ModalContainer: React.FC = ({ children }) => { const [visible, setVisible] = useState(false); const modal = useRef<HTMLDivElement>(null); const showModal = (element: ModalElement) => { if (element && modal.current) { if (React.isValidElement(element)) { ReactDOM.render(element, modal.current); } else { const el = React.createElement( element as React.ComponentClass<any, any> | React.FC<any>, {} ); ReactDOM.render(el, modal.current); } setVisible(true); } }; const dismissModal = () => { setVisible(false); }; return ( <ModalContext.Provider value={{ showModal, dismissModal }}> {children} <Modal visible={visible} onClose={dismissModal} ref={modal} /> </ModalContext.Provider> ); }; export default ModalContainer;

useModal.ts

 export const useModal = (element: ModalElement) => { const context = useContext(ModalContext); if (!context) { Error(`Can't get modal context`); } const show = useCallback(() => { context.showModal(element); }, [context, element]); const dismiss = useCallback(() => { context.dismissModal(); }, [context]); return [show, dismiss]; };

De una manera que lo usarás como tal:

 const DivModal: React.FC = () => { return <div>Test</div> } const Component: React.FC = () => { const [show, dismiss] = useModal(DivModal); const onClick = () => { show(); } return <button onClick={onClick}/> }

El problema parece ocurrir cuando creo un elemento usando React.createElement en ModalContainer.tsx que se encuentra específicamente en esta línea:

 const el = React.createElement( element as React.ComponentClass<any, any> | React.FC<any>, {} ); ReactDOM.render(el, modal.current);

El modal se procesa correctamente si reemplazo el en la función de procesamiento con un JSX de prueba como <div>test</div> . Realmente no puedo entender qué está mal, así que lo publicaré aquí en caso de que alguien sepa cuál es el problema. ¡Gracias!

about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda