gpt4 book ai didi

javascript - 在 React 中使用 createPortal 时,componentDidMount 在挂载 DOM 之前触发

转载 作者:行者123 更新时间:2023-11-28 10:41:52 25 4
gpt4 key购买 nike

我的 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)
}
}

基本上,我只想在将 ComponentA 挂载到 DOM 后才渲染 ComponentB。因此,我将 ComponentA 的代码放入 ComponentBcomponentDidMount 中。但在 ComponentA 完成挂载到 DOM 之前,ComponentB 仍在渲染。

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

最佳答案

我不确定您为什么使用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>
);
}
}

关于javascript - 在 React 中使用 createPortal 时,componentDidMount 在挂载 DOM 之前触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50610079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com