通过字符串名称动态实例化子组件 - ReactJs

2023-11-29

我有一个包含 React 组件字符串名称的数组(“SampleWidget1”);它由外部机制填充。在我的 DashboardInterface 组件中,我想使用该数组,渲染其中包含的组件,并将其显示在 DashboardInterface.render 函数中的其他静态定义的 HTML 中。我怎样才能在 React 中做到这一点?

以下是我的尝试;没有错误,但渲染的组件从未真正成功插入到 DOM 中。如果我手动将 SampleWidget1 添加到 DashboardInterface.render 函数 () 中,它将按预期显示。如果我对动态渲染的组件执行相同的操作,它就不会出现。

有什么建议么?

var widgetsToRender = ["SampleWidget1"];

/**
 * Dashboard that uses Gridster.js to display widget components
 */
var DashboardInterface = React.createClass({

    /**
     * Loads components within array by their name
     */
    renderArticles: function(widgets) {

        if (widgets.length > 0) {

            var compiledWidgets = [];

            // Iterate the array of widgets, render them, and return compiled array
            for(var i=0; i<widgets.length; i++){
                compiledWidgets.push(React.createElement(widgets[i] , {key: i}));
            }

            return compiledWidgets;

        }
        else return [];
    },

    /**
     * Load the jQuery Gridster library
     */
    componentDidMount: function(){

        // Initialize jQuery Gridster library
        $(".gridsterDashboard ul").gridster({
            widget_margins: [10, 10],
            widget_base_dimensions: [140, 140],
            //shift_larger_widgets_down: false
        });

    },

    render: function() {

        // Get the widgets to be loaded into the dashboard
        var widgets = this.renderArticles(widgetsToRender);

        return (
                <div className="gridsterDashboard">
                    <ul >
                        {this.widgets}
                        <SampleWidget1 />
                    </ul>
                </div>
        );
    }

});

这是我尝试呈现的示例组件:

/**
 * Sample component that return list item that is to be insert into Gridster.js 
 */
var SampleWidget1 = React.createClass({

    render: function() {

        // Data will be pulled here and added inside the list item...

        return (
            <li data-row="1" data-col="1" data-sizex="2" data-sizey="1">testing fake component</li>
        )

    }

});



ReactDOM.render(
  <DashboardInterface />,
  document.getElementById('dashboard')
);

为此,您应该导入组件并通过关键属性选择所需的组件

1)简短的例子

import * as widgets from './widgets.js';

const widgetsToRender = ["Comp1","Comp2","Comp3"];

class App extends Component {
    render(){
        const Widget = widgets[this.props.widgetsToRender[0]] 
        return <Widget />
    }
}

2 ) Full example webpackbin DEMO


3 ) 具有多个组件的示例

 renderWidgets(selected){
    return selected.map(e=>{
      let Widget =widgets[this.props.widgetsToRender[e-1]];
      return <Widget key={e}/>
    })
  }

webpackbin 演示

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过字符串名称动态实例化子组件 - ReactJs 的相关文章

  • 绑定 popstate 事件不起作用

    我尝试在浏览器的控制台中输入以下代码 window onpopstate function alert 1 然后单击后退按钮 没有显示任何警报 难道我做错了什么 或者是否不允许将 popstate 事件绑定到控制台的页面 使用 Chrome
  • 在 React 组件中等待异步函数并显示 Spinner

    初学者在这里 尝试从服务器获取一些数据并在获取后将其显示在我的反应组件中 但是 我在将异步函数集成到我的反应组件中时遇到了麻烦 import React useState from react import request from gra
  • Pug 从模板内的另一个文件调用 js 函数

    我花了将近四个小时都无法解决这个问题 而且我找不到任何针对此类问题的有用文档 这就是问题 我正在使用 pug jade 模板 我想调用 pug 模板内的函数来转换一些数据 这是主要模板 main template section each
  • 图表.js.如何更改“标签”数组的字体样式?

    我从 Chart JS 库中获取了一个图表 截屏 https i stack imgur com DnuRq png var ctx document getElementById myChart var data labels HTML
  • querySelector 搜索直接子级[重复]

    这个问题在这里已经有答案了 我有一些类似 jquery 的函数 function elem return gt someselector elem 问题是我怎样才能做同样的事情querySelector 问题是 gt 选择器中querySe
  • 语法错误:未知:默认情况下不支持命名空间标签

    尝试将 svg 下载为 React 组件时出现以下错误 语法错误 未知 默认情况下不支持命名空间标签 React 的 JSX 不支持命名空间标签 您可以打开 throwIfNamespace 标志来绕过此警告 import React fr
  • 为什么我可以使用 Date 对象进行数学运算? [复制]

    这个问题在这里已经有答案了 当我像这样减去两个日期对象时 const startTime new Date await someAsyncStuff const endTime new Date const elapsedTime endT
  • 仅从功能区打开一个对话框

    我有一个带有登录按钮的功能区 可打开登录对话框 我想将对话框的数量限制为一个 我正在使用函数 displayDialogAsync startAddress options callback https learn microsoft co
  • 如何将焦点设置在 BootStrap 中的第一个输入字段上? [复制]

    这个问题在这里已经有答案了 可能的重复 如何将焦点设置到独立于 id 的 HTML 表单中的第一个输入元素 https stackoverflow com questions 277544 how to set the focus to t
  • 在给定索引上将字符串分成两部分并返回两部分

    我有一个字符串 需要在给定索引上拆分 然后返回两个部分 并用逗号分隔 例如 string 8211 8 211 98700 98 700 因此 我需要能够在任何给定索引上拆分字符串 然后返回字符串的两半 内置方法似乎执行分割 但只返回分割的
  • 为什么这个递归函数返回未定义?

    我正在尝试编写一个使用递归组合两个字符串的函数 我的代码如下 但我不知道为什么该函数返回未定义 特别是当我在基本情况下使用 console log 时 它不会打印未定义而是打印正确的值 var str3 function merge str
  • 文件缓存:查询字符串与上次修改时间?

    我正在研究缓存网站资源的方法 并注意到大多数与我类似的网站都使用查询字符串来覆盖缓存 例如 css style css v 124942823 后来 我注意到每当我保存 style css 文件时 最后修改的标头都会 更新 使得查询字符串变
  • 如何在数据表角度中基于 JSON 动态填充表值?

    我在用着Angular 数据表 https l lin github io angular datatables 我需要能够根据返回的数据动态创建表 换句话说 我不想指定列标题 Example json数据 id 2 city Baltim
  • 将默认搜索文本添加到搜索框 html

    我正在努力将 搜索 文本添加到搜索框 我正在努力实现 onfocus 消失文本 And onblur 重新出现文本 到目前为止 我已经实现了这一点 但我必须将其硬编码为 html eg
  • 当rest api应用程序服务器(express)和Angulars js应用程序在不同端口上运行时出现Cors问题

    我有用node js编写的rest api应用程序 express在端口3000上运行 而angularjs应用程序在同一服务器上的端口9001上运行 从 angularjs 应用程序调用 rst api 时 出现了 cors 问题 在re
  • 为什么 console.log() polyfill 不使用 Function.apply()?

    我一直在看一些流行的console log 包装 填充 保罗 爱尔兰的 http paulirish com 2009 log a lightweight wrapper for consolelog 本阿尔曼的 http benalman
  • jQuery:向左滑动和向右滑动

    我见过slideUp and slideDown在 jQuery 中 左右滑动的功能 方式怎么样 您可以使用 jQuery UI 中的附加效果来做到这一点 详情请参阅此处 http docs jquery com UI Effects Sl
  • eventSources 到事件 Json,完整日历

    我正在尝试从 eventSources 获取 json 调用到我的事件 我在 eventSources 中返回的 json 是 title Title Test start 1305841052 当我将此字符串传递到事件中时 它会正确显示日
  • HTML5 地理定位 - 在 iOS 上无法始终工作

    目前正在使用 HTML5 地理定位 我已经在所有网络浏览器上测试了它 它似乎工作正常 然而 当我在 iPad 上测试地理定位时 它在 iPad mini 上始终有效 但当我将其放在更大的 iPad iPad 2 上时 位置似乎并不总是有效
  • 如何强制下载图片?

    我的页面上有一个动态生成的图像 如下所示 img src 我不想告诉我的用户右键单击图像并点击保存 而是想公开一个下载链接 单击该链接将提示下载图像 如何实现这一目标 最初我在 js 中尝试这样做 var path my image att

随机推荐

  • firebase 逆序排序

    var playersRef firebase database ref team mapping playersRef orderByChild score limitToFirst 7 on child added function d
  • 使用 OU 的部分路径在 Active Directory 中搜索 OU

    AD 查询语法中是否有一种方法可以通过搜索 OU 的部分路径来查找 OU 的完整路径 例如 我的 OU 的完整路径是 OU Clerks OU OfficeA OU Administration DC domain DC local 现在
  • gif 动画在 Chrome 和 Firefox 中仅循环一次

    我有一个 gif 动画 我想在页面加载时随时显示它 当我在浏览器外部查看图像时 图像无限循环并且工作得很好 但每当我在浏览器中显示图像时 动画仅循环一次 有人对让图像无限循环有什么建议吗 目前 我这样做只是为了使图像出现 这确实使它出现 但
  • 在 R 中读取两行标题

    当标题有两行必要的标题时 将文件读入 R 的最佳方法是什么 这种情况经常发生在我身上 因为人们经常使用一行作为列名称 然后在其下面包含另一行作为测量单位 我不想跳过任何事情 我希望将名称和单位保留下来 这是什么具有两个标头的典型文件可能如下
  • 无法使用 gethostbyname() 获取本地 IP

    一位朋友用过以下代码片段检索 LAN 中主机的本地 IP 地址 int buffersize 512 char name buffersize if gethostname name buffersize 1 Exception excep
  • 为什么 deref 强制转换不适用于 `From::from`?

    来自section在书里 Deref 强制转换将引用转换为实现Deref特征转换为对另一种类型的引用 它会自动发生 当我们传递对特定类型值的引用作为参数时 与参数类型不匹配的函数或方法 函数或方法定义 我正在尝试找出两者之间的区别bar a
  • Z3 优化超时

    如何为 z3 优化器设置超时 以便在超时时为您提供最知名的解决方案 from z3 import s Optimize Hard Problem print s check print s model 后续问题 你可以将z3设置为随机爬山还
  • NHibernate 删除 DAL?

    使用 NHibernate 或任何其他 ORM 消除了 DAL 的必要性 我说得对吗 或不 我试图思考如何回答这个问题 但答案是否定的 它不会消除 DAL 的必要性 而不是成为该 DAL 的一部分 毫无疑问 您之前所做的就是访问调用 sql
  • Spring @Bean 与 @Lookup 方法

    我已经利用 Lookup 注释实现了一个 Spring bean 该线程很有帮助 如何使用spring Lookup注解 随后我注意到一种奇怪的行为 我不确定是有意为之还是我自己的误解 Spring 将在使用 Service Compone
  • Android 中的图像内存管理

    这是初学者最常问的问题之一 但不幸的是我仍然无法得到任何帮助 在一个活动中 我有一个 viewflipper 我以编程方式将图像视图分配给它 使用 for 循环将大约 100 个图像添加到 viewflipper 可能是由于图像大小或由于图
  • 基于 redshift 中的自表查找更新表

    我有下表 id email mgr email mgr id 1 email1 email2 2 email2 email3 3 email3 email4 我想通过将 mgr email 与电子邮件匹配来填充 id 列中的 mgr id
  • Android OutOfMemoryError 大图像

    对于尺寸较大的图像 不是按分辨率 该方法会抛出 OutOfMemoryError 我有 12 MP 照片 所有照片的大小都不同 1 5MB 2 5MB 3 2MB 4 1MB 等 所有照片的分辨率都是相同的 4000 x 3000 像素 r
  • 当传递给另一个对象时,谁应该对 IDisposable 对象调用 Dispose?

    是否有关于谁应该致电的指导或最佳实践Dispose 当一次性对象被传递到另一个对象的方法或构造函数时 这里有几个例子来说明我的意思 IDisposable 对象被传递到一个方法中 完成后是否应该释放它 public void DoStuff
  • 使用 AWK 打印 XML 元素

    如何使用 AWK 打印 XML 元素的内容 从开始标记到结束标记 例如 考虑以下 XML
  • 追溯性地向方法添加Java注释?

    有没有办法修改 class 文件以便向某些方法添加 Java 注释 基本上我想遍历 jar 文件中每个类文件的方法并注释某些方法 请注意 这不是在使用 jar 文件时的运行时 相反 完成后我想用注释修改类文件 我确实可以访问源代码 所以如果
  • 测试 JButton 时,我的 lambda 表达式有效,但 actionPerformed 无效

    我正在按照以下步骤第一次学习如何使用 Java Swingtutorial在YouTube上 我已经到达涵盖按钮的部分 并且一直按照代码进行操作 但是 在尝试测试按钮时 当我使用actionPerformed方法 我的按钮不会打印出这个词
  • Ruby on Rails:将 javascript 数据发送到 ruby​​ 控制器

    我想发送一个 javascript 数组以由我的控制器中的方法处理 我认为我这样做是错误的 我是一个彻底的 RoR jquery 和 ajax 菜鸟 这是我所拥有的 请给我一些指导 div class dataTable style wid
  • HTML5画布的大小和分辨率有什么关系

    有没有一种方法可以创建大尺寸但低分辨率的画布 我用语法声明画布
  • Android:fastScrollEnabled 起初不起作用

    OK I am working on an App that has a page with a listview and a edittext box at top As you type things into the edittext
  • 通过字符串名称动态实例化子组件 - ReactJs

    我有一个包含 React 组件字符串名称的数组 SampleWidget1 它由外部机制填充 在我的 DashboardInterface 组件中 我想使用该数组 渲染其中包含的组件 并将其显示在 DashboardInterface re