Storybook: 「الحاوية المستهدفة ليست عنصر DOM حدث خطأ عند استخدام أسلوب ReactDOM.createPortal

تم إنشاؤها على ٢٩ أكتوبر ٢٠١٨  ·  2تعليقات  ·  مصدر: storybookjs/storybook

وصف الخطأ
أرغب في إضافة قصة لمكوِّن شكلي الذي تم إنشاؤه بواسطة ReactDOM.createPortal.
الحاوية الشكلية هي <div id="modal-root"></div> أضيفت بواسطتي في index.html.
لكن عندما أكتب قصة مثل هذه:

storiesOf('atoms/modal', module)
  .addDecorator(withKnobs)
  .add('Modal', () => (
    <Modal
      isOpen={true}
      onRequestClose={action('onRequestClose')}
    >
      <div>modal</div>
    </Modal>
  ))

「الحاوية المستهدفة ليست عنصر DOM حدث خطأ.

أعتقد أنه بسبب عدم وجود div مشروط في Storybook UI؟
كيف يمكنني إصلاح ذلك؟

لإعادة إنتاج
أنظر فوق

لقطات
2018-10-29 15 17 08

مقتطفات الشفرة
هذا هو رمز شكلي للاختصار:

const modalRoot = document.getElementById('modal-root')

class Modal extends React.Component {
  constructor(props) {
    super(props)
    this.el = document.createElement('div')
  }

  componentDidMount() {
    modalRoot.appendChild(this.el)
  }

  componentWillUnmount() {
    modalRoot.removeChild(this.el)
  }

  handleClickBackDrop = event => {
   this.props.onRequestClose(event)
  }

  render() {
    const { isOpen, children } = this.props

    if (!isOpen) {
      return null
    }

    const modalUI = (
      <BackDropWrapper
        onClick={this.handleClickBackDrop}
      >
        <ModalWrapper>
          {children}
        </ModalWrapper>
      </BackDropWrapper>
    )

    return ReactDOM.createPortal(modalUI, modalRoot)
  }
}

النظام:

  • الإطار: رد فعل
  • الإضافات: المقابض الإضافية
  • الإصدار: 4.0.0-alpha.3
react question / support

التعليق الأكثر فائدة

نظرًا لأن const modalRoot = document.getElementById('modal-root') يسمى بشكل ثابت ، فأنت بحاجة إلى إنشاء <div id="modal-root"> قبل استيراد المكون Modal . يمكنني اقتراح إنشاء هذه div بـ config.js قبل تحميل القصص.

شيء من هذا القبيل:

// config.js
const modalRoot = document.createElement('div');
modalRoot.setAttribute('id', 'modal-root');
document.body.append(modalRoot);

ال 2 كومينتر

نظرًا لأن const modalRoot = document.getElementById('modal-root') يسمى بشكل ثابت ، فأنت بحاجة إلى إنشاء <div id="modal-root"> قبل استيراد المكون Modal . يمكنني اقتراح إنشاء هذه div بـ config.js قبل تحميل القصص.

شيء من هذا القبيل:

// config.js
const modalRoot = document.createElement('div');
modalRoot.setAttribute('id', 'modal-root');
document.body.append(modalRoot);

@ igor-dv شكرا لك عمل اقتراحك.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

tirli picture tirli  ·  3تعليقات

zvictor picture zvictor  ·  3تعليقات

purplecones picture purplecones  ·  3تعليقات

sakulstra picture sakulstra  ·  3تعليقات

rpersaud picture rpersaud  ·  3تعليقات