【问题标题】:Optimizing React code优化 React 代码
【发布时间】:2018-08-04 19:16:33
【问题描述】:

有没有机会让这段代码干燥?

let allPosts = this.state.posts.map((item, i, arr) => {
  if (i === arr.length - 1) {
    return <Post
      key={item._id}
      post={item}
      nickname={this.props.nickname}
      ref={this.lastPostRef}
    /> 
  }

  return <Post
    key={item._id}
    post={item}
    nickname={this.props.nickname}
  />
});

完美的解决方案是

...
nickname={this.props.nickname}
if (i === arr.length - 1) {
  ref={this.lastPostRef}
} ...

但它在 React 中不起作用。

【问题讨论】:

标签: javascript arrays reactjs dry


【解决方案1】:

有一种更简洁的方法可以在没有任何条件的情况下执行此操作:

let allPosts = this.state.posts.map((item, i, arr) => {
  return <Post
      key={item._id}
      post={item}
      nickname={this.props.nickname}
      ref={el => this.lastPostRef = el}
    /> 
});

在循环的每次迭代中,最后一个 post ref 都将使用最新的元素进行更新。在地图结束时,最后一篇文章将被设置为最后一篇文章参考。魔法!

【讨论】:

  • 这是一个真正的魔法,因为我现在不明白为什么我能够通过this.lastPostRefthis.lastPostRef.current 获得帖子对我不起作用。但我真的很喜欢这个变种。
【解决方案2】:

为什么不让属性未定义?

 return <Post 
    key={item._id}
    post={item}
    nickname={this.props.nickname}
    ref={ i === arr.length - 1 ? this.lastPostRef : undefined }
 />

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 2022-11-23
    • 2011-12-21
    • 2011-12-09
    相关资源
    最近更新 更多