在React中使用createPortal时,在装入DOM之前触发componentDidMount

时间:2018-05-30 17:05:15

标签: javascript reactjs

我的React应用程序中有这样的代码:

import React from 'react';
import ReactDOM from 'react-dom';
import ComponentB from './ComponentB';

class ComponentA extends React.Component {
    constructor(props) {
        super(props);
        this.condition = this.props.condition;
    }

    render() {
         return ReactDOM.createPortal(
            <div id="abc"></div>,
            document.getElementById('xyz'))
    }

    componentDidMount() {
        ReactDOM.createPortal(
            <div>
                {

                    this.condition &&
                    <ComponentB />
                }
            </div>,
            document.body)
    }
}

基本上,我想在ComponentB挂载到DOM之后才呈现ComponentA。因此,我已将ComponentA的代码放在componentDidMount的{​​{1}}内。但是ComponentBComponentB完成装载到DOM之前仍然呈现ComponentA

为什么会发生这种情况?这个问题的解决方案是什么?

1 个答案:

答案 0 :(得分:-1)

我不确定您使用createPortal的原因。但是如果你只是想实现你的目标,你只需要在第一个组件的componentDidMount中设置状态条件,告诉你开始渲染你的第二个组件。

看看这是否有帮助。

const ComponentB = () => {

  return (
    <div>Hi is is componentB</div>
  );
}
class ComponentA extends React.Component {
  constructor(props) {
    super (props);

    this.state = {
      renderB: false
    };
  }
  componentDidMount() {
    this.setState({
      renderB: true
    });
  }

  render () {
    let {renderB} = this.state;

    return (
      <div>

        <h3>Hey i am component A</h3>
        {
          renderB? <ComponentB /> : null
        }
      </div>
    );
  }
}