动态附加组件

Posted

技术标签:

【中文标题】动态附加组件【英文标题】:Append a component dynamically 【发布时间】:2021-03-03 09:00:33 【问题描述】:

我尝试动态添加一个组件,这里是我尝试添加到 MainComponent 的板。 当循环 for 运行时,函数 addChild 工作和列表 boards 被填满,但没有发生其他任何事情,屏幕上没有显示任何内容

const MainComponent = props => (
    <div className=props.className>
        <p>
            <a href="#" onClick=props.addChild>Add Another Child Component</a>
        </p>
        props.boards
    </div>
);

class MainPage extends React.Component 

    state = 
        numChildren: 0
    

    onAddChild = () => 
        this.setState(
            numChildren: this.state.numChildren + 1
        );
    

    render () 

        const boards = [];

        for (var i = 0; i < this.state.numChildren; i += 1) 
            var _id = "board-" + i;
            console.log
            boards.push(<Board id=_id className="board" />);
        ;

        return (
            <div className="test">
                <Title/>
                <MainComponent addChild=this.onAddChild className="flexbox">
                    boards
                </MainComponent>
            </div>
        );
    


export default MainPage```

【问题讨论】:

【参考方案1】:

尝试为每个ChildComponent添加密钥

const boards = [];

for (var i = 0; i < this.state.numChildren; i += 1) 
    var _id = "board-" + i;
    console.log
    boards.push(<Board id=_id key=_id className="board" />);
;

因为 react 依赖于渲染循环内渲染组件的键

所以 react 认为你正在渲染的所有子元素都是一个组件,除非你给它们一个不同的键

【讨论】:

以上是关于动态附加组件的主要内容,如果未能解决你的问题,请参考以下文章

React:如何将不同类型的子组件动态附加到父组件中?

Angular 2 将组件动态附加到 DOM 或模板

如何在动态子按钮上附加关闭功能?

动态组件的 Flex 4 打印错误

单击行后插入动态创建组件

VueJS Jquery 数据表集成:将方法附加到动态 html 元素