javascript – 在动态创建的React组件上设置自定义道具
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 在动态创建的React组件上设置自定义道具,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1795字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 在动态创建的React组件上设置自定义道具](/upload/InfoBanner/zyjiaocheng/796/016afdb330ff4096bf48765c72f21035.jpg)
我正在重构我的一些React代码,以便在我无法直接使用Babel的地方(例如在页面上简短的嵌入式JavaScript)中使用.为了帮助解决这个问题,我正在设置一个简短的函数来构建组件并将道具传递给它们.这段代码工作得很好:
components.js:
import ResponsiveMenu from './components/responsive-menu';
window.setupMenu = (items, ele) => {
ReactDOM.render(<ResponsiveMenu items={items}/>, ele);
};
静态js.html:
<div id="menu"></div>
<script>
setupMenu({ items: [] }, document.getElementById('menu');
</script>
但是,当我试图将它变成更通用的东西来处理更多的组件时:
components.js:
import ResponsiveMenu from './components/responsive-menu';
import AnotherComp from './components/another-comp';
window.setupComponent = (selector, name, props) => {
let eles;
if (typeof selector == 'string') {
eles = [];
let nl = document.querySelectorAll(selector), node;
for (let i = 0; node = nl[i]; i++) { eles.push(node); }
} else {
eles = $.toArray(selector); // A helper function that converts any value to an array.
}
return eles.map (
(ele) => {
let passProps = typeof props == 'function' ? props(ele) : props;
return ReactDOM.render(React.createElement(name, passProps), ele);
}
);
};
静态js.html:
<div id="menu"></div>
<script>
setupComponent('#menu', 'ResponsiveMenu', { items: [] });
</script>
然后我收到此错误:警告:< ResponsiveMenu>上的未知道具“项目”标签.从元素中删除此prop.有关详细信息,请参阅(SO不希望我发布的真正无用的缩短链接)
请帮助我理解为什么这适用于JSX版本,而不是更适合创建组件的手动版本.
解决方法:
将字符串参数传递给React.createElement时,它将创建本机DOM元素,并且没有有效的html DOM ResponsiveMenu.
您可以将元素存储到哈希并将其存储到窗口变量中.
例:
// store component into window variable
window.components = {
ResponsiveMenu: ResponsiveMenu
}
//extract component from window variable by name
React.createElement(window.components[name], passProps)
内容总结
以上是互联网集市为您收集整理的javascript – 在动态创建的React组件上设置自定义道具全部内容,希望文章能够帮你解决javascript – 在动态创建的React组件上设置自定义道具所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。