优化 React 代码
Optimizing React code
有机会让这段代码变干吗?
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 中不起作用。
为什么不直接让 属性 未定义?
return <Post
key={item._id}
post={item}
nickname={this.props.nickname}
ref={ i === arr.length - 1 ? this.lastPostRef : undefined }
/>
有一种更简洁的方法可以不带任何条件地执行此操作:
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 将更新为最新元素。到地图结束时,最后一个 post 将设置为最后一个 post 参考。魔法!
有机会让这段代码变干吗?
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 中不起作用。
为什么不直接让 属性 未定义?
return <Post
key={item._id}
post={item}
nickname={this.props.nickname}
ref={ i === arr.length - 1 ? this.lastPostRef : undefined }
/>
有一种更简洁的方法可以不带任何条件地执行此操作:
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 将更新为最新元素。到地图结束时,最后一个 post 将设置为最后一个 post 参考。魔法!