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()
函数(来自Underscore.js库),通过创建状态中现有的selected
部分的浅拷贝来防止对其进行修改。
setStateRecursively: function(stateUpdate, callback) {
var newState = mergeStateRecursively(this.state, stateUpdate);
this.replaceState(newState, callback);
}
问题内容: 我有以下状态: 然后我更新状态: 由于setState是假设要合并的,所以我希望它是: 但是它吃掉了id,状态为: 这是预期的行为吗?仅更新嵌套状态对象的一个属性的解决方案是什么? 问题答案: 我认为不做递归合并。 您可以使用当前状态的值构造一个新状态,然后调用该状态: 我在这里使用过函数function(来自underscore.js库),通过创建状态的浅表副本来防止对该状态的现
我正在使用wedriveri o 4.5: 我需要等到某个元素存在,如果它不存在,处理这种情况。 例如: 但如果页面上不存在元素,webdriver会将我的测试标记为失败,并显示消息:“超时10000毫秒。”。尝试减少运行时间或增加测试规格的超时时间(http://webdriver.io/guide/testrunner/timeouts.html); 如果回复promise,确保其得到解决 >
下面是一个类和log4j配置: $vi My.java $vi log4j2.xml 在日志/foo.bar.log中出现和消息。这是我所期望的。但是在日志/foo.log中什么都没有出现,我期望那里有消息。在控制台上也什么都没有出现,但是我期望消息。所以它没有像我预期的那样工作。那么我的错误是什么? 还有LogManager的论点。getLogger必须是记录器的名称。但我也看到了论点是类的例子
我想使用查找从一个集合中获取一些数据并将其放入另一个集合中。 在localfield或foreignfield中写什么都不重要,因为它从player_game_stats中获取所有数据并将其插入player集合中的每个文档中。我想检查localfield和foreignField是否相等,但lookup不检查这一点。我对mongodb使用NoSqlBooster
我试图执行一个简单的浏览器测试 浏览器立即启动并关闭,引发以下错误 HTTP请求路径为空意味着什么?新版本的watir是否更改了调用参数? 有人遇到过类似的问题吗? 我的系统是Windows 7 64位,我运行在一个代理之后,浏览器已经配置了一个代理 ---编辑--- 我引入了一个尾随斜杠,但我现在得到了一个新的错误,也得到了以前的错误,每次我都要更改代码并保存它来获得这个错误 ---编辑---