我有些状态
state = {
theme: {
background: { bgType: 'colour', value: '#449dc7' },
primary: '#4d5a66',
secondary: '#476480',
},
};
当我尝试更新嵌套属性,如background
时,我调用setState
如下所示
this.setState(prevState => ({
...prevState,
theme: { background: { bgType: 'colour', value: color.hex } },
}));
然而,这只是将状态替换为
theme: { background: { bgType: 'colour', value: color.hex } },
我就失去了其他财产
你必须传播主题
对象:
this.setState(({ theme }) => {
return { theme: { ...theme, background: { bgType: 'colour', value: color.hex } } };
});
同时展开内部对象:
this.setState(prevState => ({
...prevState,
theme: {
...prevState.theme,
background: {
...prevState.theme.background,
bgType: 'colour', value: color.hex
}
},
}));
如果您想在主题中只正确设置背景,您需要对主题使用扩展语法,而不是像状态一样使用扩展语法
this.setState(prevState => ({
theme: { ...prevState.theme, background: { bgType: 'colour', value: color.hex } }
}));
如果你想把背景值也合并起来,你需要像这样分散它
this.setState(prevState => ({
theme: { ...prevState.theme, background: {
...prevState.theme.background,
bgType: 'colour', value: color.hex
}}
}));
我试图更新的值与中的的值,但它只更改的值,而不更新
问题内容: 我有一个用例,我必须 如果键在ConcurrentHashMap中不存在,则插入一个新值 如果键已经存在于ConcurrentHashMap中,则新值将旧值替换为新值(其中新值是从旧值派生的(不是昂贵的操作)) 我提供以下代码: 您认为它是正确的并且是线程安全的吗? 有没有更简单的方法? 问题答案: 您可以使用下面与您的代码等效的代码来使其短一些。我已经对数以千计的线程进行并发访问进行
操作步骤: 菜单栏: Refactor —> Find and Replace Code Duplicates...
我对Android Studio有一个奇怪的问题。它没有找到对Google Play服务库的符号引用,如图所示: 我的文件如下所示: 奇怪的是,我可以在我的手机中构建甚至运行应用程序,没有任何问题。当我想使用库时,这个问题使得IDE和记事本一样有用。我该如何解决这个问题?
我正在使用一个使用自己的Android:Theme的库,因此在构建时收到以下错误:错误:(55,9)任务':Contacit:ProcessDebugManifest'的执行失败。 清单合并失败:com.github.florent37:MaterialViewPager:1.0.3.2:11:18value=(@style/AppTheme)中也存在来自AndroidManifest.xml:4
可能重复: 解析错误:语法错误,意外'(',期望','或';'中 我得到以下错误: 分析错误:语法错误,意外“.”,期待“,”或“;”在第19行的xxx中 在这一行: