当前位置: 首页 > 知识库问答 >
问题:

动态导入React组件的样式组件警告

金坚
2023-03-14

从一个无头的CMS中,我正在获取应该包含在某个页面上的组件列表。获取后,我将动态地导入提到的组件,如下所示:

const components = ["Test", "Test2"]; // comes from CMS

const DynamicComponent = ({ name }) => {
   let Component;
   Component = require(`./components/${name}`).default;
   return <Component />;
};

export default function App() {
   return (
      <Container>
         {components.map((comp, i) => (
         <DynamicComponent name={comp} key={i} />
          ))}
      </Container>
   );
}

然后我将这些组件作为子道具传递给某个容器。

然而,尽管一切都运行良好,但对于我拥有的每个组件,我都收到了一些警告:

id为“sc-bdnylx”的组件styled.div已动态创建。您可能会看到这个警告,因为您在另一个组件中调用了styled。要解决这个问题,只能在任何呈现方法和函数组件之外创建新的StyledComponents。

我搜索了一下这个警告,但是所有的解决方案都是不在组件中定义样式。我可能错了,但我不认为这适用于这里。

下面是完整的示例:https://codesandbox.io/s/style-components-dynamic-5id3y?file=/src/app.js(检查控制台输出)

我怎样才能摆脱这个警告?

谢谢你

共有1个答案

那昊
2023-03-14

好吧,当它说“在任何呈现方法和函数组件之外创建新的StyledComponents”时,警告就很清楚了。因此,您可以做的是将功能组件dynamiccomponent重构为基于类的组件

class DynamicComponent extends React.Component {
  constructor(props) {
    super(props);
    this.Component = require(`./components/${this.props.name}`).default;
  }
  render() {
    return <this.Component />;
  }
};

编辑:在你的沙箱上测试,修正了我以前的代码,你的警告消失了

 类似资料:
  • 问题内容: 我有一个页面,可根据用户输入呈现不同的组件。目前,我已经对每个组件的导入进行了硬编码,如下所示: 但是,我一直都在更改/添加组件。有没有办法使文件仅存储组件的名称和路径,然后将它们动态导入另一个文件中? 问题答案: 我认为对于我想要实现的目标可能有些困惑。我设法解决了我遇到的问题,并在下面显示了我的代码,其中显示了我的解决方法。 单独的文件(ComponentIndex.js): 主文

  • 本文向大家介绍怎样动态导入组件?相关面试题,主要包含被问及怎样动态导入组件?时的应答技巧和注意事项,需要的朋友参考一下 自己使用 import 和 async/await 实现的异步组件 React.lazy 开源库 react-loadable 库/react-lazyload 库 babel 动态导入(Dynamic Import)

  • 问题内容: 与 哪个更好,为什么? 还是除了以后编写更少的代码外没有其他区别? 写作是否意味着只导入Component对象? 问题答案: 让您代替。它减少了React名称空间的键入和重复,这通常是一种理想的现代编码约定。 此外,Webpack 2和Rollup之类的工具会“摇晃”,这意味着任何未使用的导出都不会捆绑到您的最终代码中。使用/,您可以保证所有React的源代码都将被捆绑。使用,某些工具

  • 我试图找到一种方法来动态导入继承一些标准样式的svg图标。我没有看到其他人写这个...所以我想我走错了路。 我尝试过在样式化的组件中创建一个SVG包装器,但这给了我一个svg的巢 SVG图标代码 我的图标代码 导入正在工作并显示,但我希望将组件作为样式化组件,这将使我能够使用道具设置主题并动态更改SVG样式。

  • 我正在有条件地设置我的

  • jsx 使用上面的代码,im得到控制台错误: