【发布时间】:2019-05-29 12:07:17
【问题描述】:
我正在尝试使用 react 来按顺序呈现组件列表,组件正在更新这个元素数组,但没有对它们重新排序。
伪代码;
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 的结果,项目将在数组中重新排序,但是表单渲染不会以新顺序重新渲染内容
【问题讨论】:
-
没有为这些项目设置 id。
-
你有没有做一个可行的例子让我们看看?因为我们不知道所有内容的结构或重新排序的代码。
-
这不是一个好方法
this.setState({ page: this.state.page })它意味着您正在改变状态,如果您想将状态更改为先前状态的派生版本,请使用:this.setState(prevState => ....)。 -
@Titus 在那个回调中我会做什么?这是我要设置新数组内容的地方吗?
-
是的,您从回调中返回的内容将被设置为新状态,您可以这样做:
this.setState(prevState => ({page: [...prevState.page].sort(.....)}))
标签: javascript reactjs jsx