【发布时间】:2017-05-31 21:03:30
【问题描述】:
在我的 React 状态下,我想通过始终将选定的对象放在中间,同时保持其他对象的升序来重新排列 3 个对象的数组。
现在,我在每个对象中使用 order 属性来跟踪顺序,但这可能不是最好的方法。
例如:
this.state = {
selected: 'item1',
items: [
{
id: 'item1',
order: 2
},
{
id: 'item2'
order: 1
},
{
id: 'item3'
order: 3
}
]
}
结果数组:[item2, item1, item3]
现在,让我们假设用户选择了 item2。我将相应地更新 selected 状态属性,但是如何更新 items 属性以得到如下结果:
this.state = {
selected: 'item2',
items: [
{
id: 'item1',
order: 1
},
{
id: 'item2'
order: 2
},
{
id: 'item3'
order: 3
}
]
}
结果数组:[item1, item2, item3]
你会怎么做?我已经看到了一些 lodash 实用程序函数可以提供帮助,但我想在 vanilla JavaScript 中实现这一点。
【问题讨论】:
-
如果有偶数个项目,你会把选中的项目放在哪里?
-
仅供参考,您应该使用 this.setState() 来设置反应状态。除了在构造函数中之外,永远不要直接设置状态。
-
嗯,这显然行不通,但这是需要考虑的事情。我猜一个很好的解决方案可以适用于任何奇数的项目,即使它可能会变得非常复杂。但是,在我的用例中,我只需要处理 3 个项目,所以我认为可能有一些聪明的解决方案可以让它工作!编辑@JamesKraus 确实!这只是所需结果的说明:)
标签: javascript reactjs