Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 动态组件名称-反应_Javascript_Reactjs - Fatal编程技术网

Javascript 动态组件名称-反应

Javascript 动态组件名称-反应,javascript,reactjs,Javascript,Reactjs,我有三个部分: const Comp0 = () => <div>1</div>; const Comp1 = () => <div>2</div>; const Comp2 = () => <div>3</div>; 它应该有用。。。理论上。然而,我得到了一个非常奇怪的错误。两个错误 警告:正在使用大写HTML。在React中始终使用小写HTML标记 警告:此浏览器无法识别该标记。如果要呈现React组

我有三个部分:

const Comp0 = () => <div>1</div>;
const Comp1 = () => <div>2</div>;
const Comp2 = () => <div>3</div>;
它应该有用。。。理论上。然而,我得到了一个非常奇怪的错误。两个错误

警告:正在使用大写HTML。在React中始终使用小写HTML标记

警告:此浏览器无法识别该标记。如果要呈现React组件,请以大写字母开头其名称


它们怎么可能同时出现呢?

您可以使用如下映射执行一个函数:

const stateArray = [Comp0, Comp1, Comp2];
const getComp = (Comp) => <Comp>
const getCompFromArray = (i) => getComp(stateArray[i]);

您可以使用如下映射执行函数:

const stateArray = [Comp0, Comp1, Comp2];
const getComp = (Comp) => <Comp>
const getCompFromArray = (i) => getComp(stateArray[i]);

您可以简单地将动态标记呈现为

const Tag = `Comp${this.state.activeComponent}`;
return (
   <Tag />
}
对于一个普通的DOM元素,可以传递一个字符串

React.createElement('div');
既然你写了

`Comp${this.state.activeComponent}`
你得到的是

React.createElement('Comp0')
这是不太容易理解的反应,它抛出了一个警告

警告:正在使用大写HTML。始终使用小写HTML 标签在反应


您可以简单地将动态标记呈现为

const Tag = `Comp${this.state.activeComponent}`;
return (
   <Tag />
}
对于一个普通的DOM元素,可以传递一个字符串

React.createElement('div');
既然你写了

`Comp${this.state.activeComponent}`
你得到的是

React.createElement('Comp0')
这是不太容易理解的反应,它抛出了一个警告

警告:正在使用大写HTML。始终使用小写HTML 标签在反应


如果要使用React.createElement创建自定义组件元素,则必须向其传递直接类/函数,而不是仅用于DOM元素的名称,例如React.createElementShoot0而不是React.createElement'Shoot0'

您可以通过将要使用的组件放入数组中并对其进行索引来避免这个问题

常数0==>1; 常数1==>2; 常数2==>3; 常量Shoots=[Shoot0,Shoot1,Shoot2]; 类应用程序扩展了React.Component{ 构造器{ 超级作物; 此.state={ 活动组件:0 }; } 组件安装{ setInterval=>{ this.setStateprevState=>{ 返回{ activeComponent:prevState.activeComponent+1%3 } } }, 1000 } 渲染{ return React.createElementShoots[this.state.activeComponent] } } ReactDOM.render,document.getElementById'app'
如果要使用React.createElement创建自定义组件元素,则必须向其传递直接类/函数,而不是仅用于DOM元素的名称,例如React.createElementShoot0而不是React.createElement'Shoot0'

您可以通过将要使用的组件放入数组中并对其进行索引来避免这个问题

常数0==>1; 常数1==>2; 常数2==>3; 常量Shoots=[Shoot0,Shoot1,Shoot2]; 类应用程序扩展了React.Component{ 构造器{ 超级作物; 此.state={ 活动组件:0 }; } 组件安装{ setInterval=>{ this.setStateprevState=>{ 返回{ activeComponent:prevState.activeComponent+1%3 } } }, 1000 } 渲染{ return React.createElementShoots[this.state.activeComponent] } } ReactDOM.render,document.getElementById'app'
我很确定反应。createElement。。。创建DOM元素而不是Reactcomponent@devk不,它也会创建一个React组件,为什么要这样做?为什么不使用if语句?@JanickFischer如果我有100个组件呢?在每种情况下使用if都是一种过分的做法。如果您有100个组件,那么您可以将它们放入状态数组中,如下所示。否则你会怎么追踪他们?我很确定你会反应。createElement。。。创建DOM元素而不是Reactcomponent@devk不,它也会创建一个React组件,为什么要这样做?为什么不使用if语句?@JanickFischer如果我有100个组件呢?在每种情况下使用if都是一种过分的做法。如果您有100个组件,那么您可以将它们放入状态数组中,如下所示。你还有什么办法跟踪他们呢?我觉得这个解决方案不太合适。。。我宁愿避免将每个导入的组件都放在一个数组中。原因是什么?您没有全局调用组件,是吗?用例是什么?还有,你看过@Shubham的解决方案吗?是的,我从全球范围内导入了它们。我觉得这个解决方案不太合适。。。我宁愿避免将每个导入的组件都放在一个数组中。原因是什么?您没有全局调用组件,是吗?用例是什么?还有,你看过@Shubham的解决方案了吗?是的,我从全局范围导入了它们