【问题标题】:inject extra element into jsx after last element of array?在数组的最后一个元素之后将额外的元素注入jsx?
【发布时间】:2017-10-05 07:46:37
【问题描述】:

如何将 'd' 渲染到下面的数组?

const App = () => (
  <div style={styles}>
    {['a', 'b', 'c'].map((o, i) => {
      return (<div>{o}</div>)
    }
    )}
  </div>
);

说我会将['a', 'b', 'c'] 分配给const x 如何在c 之后使用地图和渲染新元素?我可以得到像

这样的最后一个元素
{
    if(i === x.length - 1) { return('d') }
} 

但是c会消失,如何创建第4个元素?

【问题讨论】:

  • 有什么特殊原因必须从地图内部完成吗?你不能在地图后面打印d吗?

标签: javascript ecmascript-6 jsx


【解决方案1】:

您可以从地图回调中返回数组中的两个项目:

const x = ['a', 'b', 'c'];

const App = () => (
  <div>
    {x.map((o, i) => {
      if(i === x.length - 1) {
        return [
          <div key={i}>{o}</div>,
          <div key={i + 1}>d</div>
        ];
      }
      
      return (<div key={i}>{o}</div>)
    }
    )}
  </div>
);

ReactDOM.render(
  <App />,
  app
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id="app"></div>

但是,由于您总是将 d 添加到末尾,因此您可以将标签粘贴在循环之后:

const x = ['a', 'b', 'c'];

const App = () => (
  <div>
    {x.map((o, i) => {      
      return (<div key={i}>{o}</div>)
    }
    )}
    
    <div>d</div>
  </div>
);

ReactDOM.render(
  <App />,
  app
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id="app"></div>

【讨论】:

  • 可能会用[...x.map 替换[].concat,因为你无论如何都在使用传播
  • @CodingIntrigue - 只是传播并不会展平数组数组,但事实证明 react 会自动执行此操作。这意味着我们可以跳过传播和连接。查看更新的代码。
猜你喜欢
  • 1970-01-01
  • 2020-05-27
  • 1970-01-01
  • 2015-01-16
  • 2023-01-05
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
相关资源
最近更新 更多