【发布时间】:2017-01-04 04:16:43
【问题描述】:
有什么办法可以简化下面的代码?可能是通过使用下划线 js,我浏览了文档,但找不到任何可以帮助我解决动态键值对的内容。
对象:
this.state = {
media : {
video : "",
photos : [{
title : "Storefront",
url : "https://cdn.filepicker.io/api/file/cHyLd9KtSNibpsGlQsny",
category : {
interior : false,
exterior : true,
closeup : false
},
display : {
preview : false,
featured : true,
none : false
},
size : "800 x 600",
attribution_link : "",
attribution_text : "",
description : ""
},
{
...
}]
}
}
我正在使用 react,在调用 handleDisplayClick(e) 方法时,e 将具有键名,我需要将其更新为 true,其余为 false。
handleDisplayClick = (e) => {
var stateCopy = Object.assign({}, this.state);
if(e == "preview"){
stateCopy.media.photos[this.state.media.selectedMediaIndex].display.preview = true;
stateCopy.media.photos[this.state.media.selectedMediaIndex].display.featured = false;
stateCopy.media.photos[this.state.media.selectedMediaIndex].display.none = false;
}
else if(e == "featured"){
stateCopy.media.photos[this.state.media.selectedMediaIndex].display.preview = false;
stateCopy.media.photos[this.state.media.selectedMediaIndex].display.featured = true;
stateCopy.media.photos[this.state.media.selectedMediaIndex].display.none = false;
}
else{
stateCopy.media.photos[this.state.media.selectedMediaIndex].display.preview = false;
stateCopy.media.photos[this.state.media.selectedMediaIndex].display.featured = false;
stateCopy.media.photos[this.state.media.selectedMediaIndex].display.none = true;
}
this.setState(stateCopy);
}
【问题讨论】:
-
你可以使用lodash的
set。参考lodash.com/docs/4.17.3#set
标签: javascript reactjs underscore.js