Свойство React не существует для типа IntrinsicAttributes (настраиваемый хук) - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть пользовательский хук, чтобы показать модал, но я получаю

Type '{ children: Element; modalOpen: boolean; onClose: () => void; }' is not assignable to type 'IntrinsicAttributes & { children: any; }'.
  Property 'modalOpen' does not exist on type 'IntrinsicAttributes & { children: any; }'.

Мой пользовательский хук:

import React, { useState, HTMLProps } from 'react';
import styled from 'styled-components';
import AriaModal from 'react-aria-modal';

type ModalWrapperProps = HTMLProps<HTMLDivElement> & {
  large: boolean;
  formModal?: boolean;
};

const ModalWrapper = styled(ContainerBoxShadow).attrs({ className: 'ModalWrapper' })`
  ${(_: ModalWrapperProps) => ''}
  width: ${props => (props.formModal ? '80vw' : '90vw')};
  max-height: 90vh;
  overflow-x: hidden;
  overflow-y: auto;

  @media ${props => props.theme.devices.medium} {
    width: ${props => (props.large ? '80vw' : '50vw')};
    max-height: 80vh;
  }

  @media ${props => props.theme.devices.large} {
    width: ${props => (props.large ? '80vw' : '40vw')};
  }

  @media ${props => props.theme.devices.laptop} {
    width: ${props => (props.large ? '80vw' : '30vw')};
  }
`;

const ModalCloseButton = styled(ButtonClosePrimary).attrs({ className: 'ModalCloseButton' })`
  margin-bottom: 2rem;
  float: right;
`;

const useModal = () => {
  const [modalOpen, setModalOpen] = useState(false);

  const ModalComponent = ({ children }, large, formModal) => {
    return (
      <AriaModal onExit={setModalOpen(false)} alert focusDialog titleId="modal-title" verticallyCenter>
        <ModalWrapper large={large} formModal={formModal}>
          <div>
            <ModalCloseButton onClick={() => setModalOpen(false)}></ModalCloseButton>
          </div>
          {children}
        </ModalWrapper>
      </AriaModal>
    );
  };

  return {
    ModalComponent,
    modalOpen,
    setModalOpen,
  };
};

export default useModal;

И затем я вызываю его в другом файле (buttonPage):

const ProfileDataPage = () => {
  const { ModalComponent, modalOpen, setModalOpen } = useModal();

  return (
    <ButtonAccentPrimary tabIndex={0} onClick={() => setModalOpen(true)}>
      some button text
    </ButtonAccentPrimary>


    <ModalComponent modalOpen={modalOpen} onClose={() => setModalOpen(false)}>
      <myPage />
    </ModalComponent>
  );
};

Ожидаемое поведение: Когда я попаду на страницу, назовем ее ButtonPage и нажму мою кнопку, мой модал должен подняться, и я смогу закрыть его снова.

Фактическое поведение: когда я попадаю на ButtonPage, модальный режим уже открыт, и я не могу его закрыть.

Я должен указать, что ошибка возникает в ModalComponent

1 Ответ

1 голос
/ 13 февраля 2020
const ModalComponent = ({ children }, large, formModal) => {

Проблема здесь, похоже, в том, что { children } содержит все реквизиты, которые вы передаете своему ModalComponent , можете ли вы использовать вместо этого только дочернюю опору, как в:

const ModalComponent = (children, large, formModal) => {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...