我的目标是在页面/父组件上动态添加组件.

我从一些基本的示例模板开始,如下所示:

主要的js:

var App = require('./App.js');
var SampleComponent = require('./SampleComponent.js');
ReactDOM.render(<App/>, document.body);
ReactDOM.render(<SampleComponent name="SomeName"/>, document.getElementById('myId'));

应用程序.js:

var App = React.createClass({
    render: function() {
        return (
            <div>
                <h1>App main component! </h1>
                <div id="myId">myId div</div>
            </div>

        );
    }

});

采样组件.js:

var SampleComponent = React.createClass({
    render: function() {
        return (
            <div>
                <h1>Sample Component! </h1>
            </div>
        );
    }
});

这里SampleComponent被安装到<div id="myId"></div> node 上,这是在App.js模板中预先编写的.但如果我需要在应用程序组件中添加无限数量的组件,该怎么办?很明显,我不能坐在那里.

在阅读了一些教程之后,我仍然不了解组件是如何创建并动态添加到父组件的.什么是一种方法?

推荐答案

您需要将组件作为子组件传递,如下所示:

var App = require('./App.js');
var SampleComponent = require('./SampleComponent.js');
ReactDOM.render(
    <App>
        <SampleComponent name="SomeName"/> 
    <App>, 
    document.body
);

然后将它们附加到组件的主体中:

var App = React.createClass({
    render: function() {
        return (
            <div>
                <h1>App main component! </h1>
                {
                    this.props.children
                }
            </div>
        );
    }
});

你不需要手动操作HTML代码,React会帮你做到这一点.如果你想添加一些子组件,你只需要改变props 或声明它取决于.例如:

var App = React.createClass({

    getInitialState: function(){
        return [
            {id:1,name:"Some Name"}
        ]
    },

    addChild: function() {
        // State change will cause component re-render
        this.setState(this.state.concat([
            {id:2,name:"Another Name"}
        ]))
    }

    render: function() {
        return (
            <div>
                <h1>App main component! </h1>
                <button onClick={this.addChild}>Add component</button>
                {
                    this.state.map((item) => (
                        <SampleComponent key={item.id} name={item.name}/>
                    ))
                }
            </div>
        );
    }

});

Reactjs相关问答推荐

更新数据时有关CQR和更新UI的问题

是否可能有不同的加载器用于路径有查询参数和没有查询参数,或者在React Router 6中添加它们时有条件地跳过一个加载器?

REACTION 18功能组件正在开发中的S

for each 子级加载父路由加载器

MUI:在props 主题中找到的值:;错误;是[Object],而不是字符串或数字

PWA:注册事件侦听器不会被触发

设置自定义形状的纹理

在reduce()方法上得到NaN

如何在 ChartJS 中创建此图表?在 NEXTjs 和 TSX 中

使用reactrouterdom时显示"对象无效作为React子组件"错误

如何初始化 redux 全局存储 preloadedState

null 不是对象(判断RNSound.IsAndroid)

我应该使用 useEffect 来为 React Native Reanimated 的 prop 值变化设置动画吗?

React CSSTransition 两次创建新页面并在这两个相同的页面上运行转换

添加 React/Redux 组件模板的 VS Code 扩展

如何在 MUI 数据网格中的 renderCell 组件之间传递状态

React Router 6.4CreateBrowserRouter子元素不显示

react-query、react-hook-form 和表单验证

哪个是创建 React 应用程序的更好方法?

如果查询不存在,如何返回所有产品?