将组件保存到列表中,然后有条件地渲染

Posted

技术标签:

【中文标题】将组件保存到列表中,然后有条件地渲染【英文标题】:Save components to a list and then conditionally render 【发布时间】:2022-01-03 04:41:33 【问题描述】:

我有一个显示按钮列表和相应 iframe 组件的网页。每次单击新按钮时,都会显示一个新的 iframe,并删除现有的 iframe。

这是 iframe 组件:

const IframeComp = ( button ) => 

    return (
      <iframe src=button></iframe>
    )
  

export default IframeComp

当应用像这样加载时,我正在将所有可能的 iframe(作为字符串)加载到 app.jsx 的列表中:

  const [iframeComponents, setIframeComponents] = useState()
  useEffect(() => 
    function loadIframes() 
      let iframes = 
      for (const iframeUrl of constants.buttonUrls) 
        const iframe = `<IframeComp button=$iframeUrl></IframeComp>`
        iframes[iframeUrl] = iframe
      
      setIframeComponents(iframes)
    
    loadIframes()
  , []);

并将iframeComponents 传递给 iframe 显示页面文件,该文件检查按下了哪个按钮并呈现适当的 iframe。 当然,iframe 现在正在呈现为字符串。 有没有办法将 app.jsx 中的这些 IframeComp 组件加载/渲染为实际的组件/html,将它们存储在列表中,然后根据按钮单击将它们简单地显示在下游?

或者,我尝试使用html-react-parser 库在 iframe 显示页面文件中简单地将字符串呈现为 html,但这不起作用,因为它将字符串小写,而且它们还必须花时间来呈现每次点击按钮。

【问题讨论】:

我不确定你的 iframe 页面上有什么,但为什么要急切地加载它们呢?这似乎是一种性能反模式:用户能否以如此快的速度与他们进行真实的交互,以至于一次加载一个(或几个)不是更好的模式?另外,用户会使用每一帧吗?如果不是,那么加载它们是否会浪费它们的带宽? 能否提供渲染iframeComponents的代码 【参考方案1】:

为什么不直接使用组件呢?

const [iframeComponents, setIframeComponents] = useState();

useEffect(() => 
  function loadIframes() 
    let iframes = ;
    for (const iframeUrl of constants.buttonUrls) 
      const iframe = <IframeComp button=iframeUrl></IframeComp>;
      iframes[iframeUrl] = iframe;
    
    setIframeComponents(iframes);
  
  loadIframes();
, []);

您通过按钮更改 iframe 的实际代码是什么?

【讨论】:

【参考方案2】:

如果不查看您在哪里渲染 iFrame,很难看到这里发生了什么,但我会指出我认为您可能会找到所需内容的位置:

条件渲染:https://reactjs.org/docs/conditional-rendering.html

此外,您实际上可以在组件渲染中的数组上使用 .map 函数,如下所示:

function Comp() 
    return (
        <div>
            ['TestVal1', 'TestVal2'].map((val) => return (<p>val</p>))
        </div>
    )

【讨论】:

以上是关于将组件保存到列表中,然后有条件地渲染的主要内容,如果未能解决你的问题,请参考以下文章

React——条件渲染

Vuejs 组件不会立即渲染

超简单Python将指定数据插入到docx模板指定位置渲染并保存

如何根据 prop 有条件地渲染组件的颜色?

待办事项列表应用程序中搜索字段文本中的每个更新的条件渲染

带有 Vuex 状态的条件列表渲染