javascript - 反应不在渲染上重新排序组件数组
问题描述
我正在尝试按顺序呈现组件列表,该组件正在更新这个元素数组,但没有重新排序它们。
伪代码;
class Form extends Component {
//
// .... other initialization code and logic
//
updatePositions() {
//
// re-order this.state.page.page_contents
//
this.setState({ page: this.state.page });
}
renderContents() {
return this.state.page.page_content.map((c, i) => {
return (<ContentItem
key={ i }
content={ c }
/>);
});
}
render() {
return (
<div className="row">
<div className="medium-12 columns">
{ this.renderContents() }
</div>
</div>
);
}
}
如果我注销 page.page_content 的结果,则项目正在数组中重新排序,但是表单渲染不会以新顺序重新渲染内容
解决方案
如果您的数组顺序可能会发生变化,则不应使用数组索引作为键。密钥应该是永久的,因为 React 使用密钥来识别组件,如果一个组件接收到一个以前属于不同组件的密钥,React 认为它和以前是同一个组件。
为您的元素创建对这些元素永久存在的唯一键。
推荐阅读
- python - 如何使用 AdaBoost 和 GridSearchCV 获得最佳估计器参数
- c# - 如何对我的列表进行排序
按日期时间? - postgresql - 增加查询参数直到达到 LIMIT
- java - 我如何告诉 *early* 堆栈帧在一系列递归结束时实现了“成功”?
- jquery - Dropzone maxFilesize 上的错误
- javascript - Javascript 决策语句无法正常工作
- algorithm - 为什么时间复杂度是 T(n) = 2n^2 + n + 1?
- jdbc - MyBatis 中的 session 和 connection 有什么区别?
- javascript - 我的 Vue chrome 扩展无法在生产模式下工作。错误是:“无法建立连接。接收端不存在”
- nginx - Nginx RTMP 模块不保存直播文件