我有以下状态:
this.setState({ selected: { id: 1, name: 'Foobar' } });
然后我更新状态:
this.setState({ selected: { name: 'Barfoo' }});
由于setState是假设要合并的,所以我希望它是:
{ selected: { id: 1, name: 'Barfoo' } };
但是它吃掉了id,状态为:
{ selected: { name: 'Barfoo' } };
这是预期的行为吗?仅更新嵌套状态对象的一个属性的解决方案是什么?
我认为setState()
不做递归合并。
您可以使用当前状态的值this.state.selected
构造一个新状态,然后调用setState()
该状态:
var newSelected = _.extend({}, this.state.selected);
newSelected.name = 'Barfoo';
this.setState({ selected: newSelected });
我在这里使用过函数_.extend()
function(来自underscore.js库),selected
通过创建状态的浅表副本来防止对该状态的现有部分进行修改。
另一种解决方案是编写setStateRecursively()
对新状态进行递归合并,然后对其进行调用replaceState()
:
setStateRecursively: function(stateUpdate, callback) {
var newState = mergeStateRecursively(this.state, stateUpdate);
this.replaceState(newState, callback);
}
然后更新状态: 由于应该合并,我希望它是: 但相反,它会吃掉id,状态为: 这是预期的行为吗?只更新嵌套状态对象的一个属性的解决方案是什么?
未解决最初的关闭原因
我想使用查找从一个集合中获取一些数据并将其放入另一个集合中。 在localfield或foreignfield中写什么都不重要,因为它从player_game_stats中获取所有数据并将其插入player集合中的每个文档中。我想检查localfield和foreignField是否相等,但lookup不检查这一点。我对mongodb使用NoSqlBooster
我想让某个Kafka主题只保留一天的数据。但如果我们继续向主题(活动)发送数据,它似乎根本没有删除任何数据。我尝试了主题端参数(Retention.ms)和服务器端: 但如果我们继续向它发送数据,它似乎对活的主题不起作用。只有当我们停止向主题发送数据时,它才会遵循保留策略。 那么,一个活动主题的正确配置是什么,只保留数据一段时间?
你好,亲爱的StackOverflow社区,我最近遇到了一个问题,我不能把一个已经保存的对象的引用放进去。我不想保存或更新对象,因为这些对象是预先插入到我们的数据库中的。 所以基本上我的情况是这样的:我有一个父,在本例中它是一个摄取,对象有一个IntakeTimes列表,它们被声明为remainingdoses。有道理,嗯。 我的模型看起来如下: 我期待着任何帮助或提示,谢谢社区。
我不明白为什么我的结果不同: 我有表订单和列价格(在mysql中键入double)。 数据库中的价格值为13.5。 查询: 结果是:1.21 查询: 结果是1.22 不舍入:结果为1.215 因此,一轮后的正确结果是1.22。 为什么查询