javascript - 通过对象解构和三元运算符组合对象

标签 javascript json reactjs ecmascript-6 object-destructuring

我试图根据一些 bool 变量(sticky 和 ​​isHidden)来确定样式。

我知道我可以使用 {...object1, ...object2} 组合 2 个对象

我试图将相同的逻辑应用于嵌套对象,以便样式将是组合对象 styles.stickyNav 的结果。 , styles.hidestyles.navBar如果两个 bool 值都为 true,但只是 style.navBar如果两者都不成立

const styles = {
  hide: {  
    top: -60
  },
  stickyNav: {
      height: 60,
      position: fixed
  },
  navBar:{
    display: 'flex',
    width: '100%',
    background: 'white',
    boxShadow: "0 10px 6px -6px #777"
  }
}

const style={
  sticky ? {...styles.stickyNav} : {},
  isHidden && sticky ? {...styles.hide} : {},
  {...style.navBar}
}

示例输出

如果两个 bool 值都为 true,则样式应该为

{
  top: -60
  height: 60,
  position: fixed
  display: 'flex',
  width: '100%',
  background: 'white',
  boxShadow: "0 10px 6px -6px #777"
}

如果两者都不成立,那么风格应该是

{
  display: 'flex',
  width: '100%',
  background: 'white',
  boxShadow: "0 10px 6px -6px #777"
}

如果只有 Sticky 为 true,那么 style 应该为

{
  height: 60,
  position: fixed
  display: 'flex',
  width: '100%',
  background: 'white',
  boxShadow: "0 10px 6px -6px #777"
}

最佳答案

我会采用以下方法,仅在最初为空的对象中使用扩展运算符

const styles = {
  hide: {  
    top: -60
  },
  stickyNav: {
      height: 60,
      position: 'fixed'
  },
  navBar:{
    display: 'flex',
    width: '100%',
    background: 'white',
    boxShadow: "0 10px 6px -6px #777"
  }
}

var sticky = true;
var isHidden = true;

/***Original ***/
/*const style={
  ...(sticky ? styles.stickyNav : {}),
  ...(isHidden && sticky ? styles.hide : {}),
  ...styles.navBar
}*/

/*Improved Based on comment*/
const style={
  ...(sticky && styles.stickyNav),
  ...((isHidden && sticky) && styles.hide),
  ...styles.navBar
}



console.log(style);

请注意,有几个控制台错误需要修复

关于javascript - 通过对象解构和三元运算符组合对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63665970/

相关文章:

mysql - Spring data JPA中将java bean的List<Long>转换为mysql的json

javascript - 何时通过 API 调用在 React 中滚动IntoView

javascript - 处理多个ajax请求,只做最后一个请求

javascript - 使用构造函数与闭包创建对象

javascript - 使用 Ajax 和 jQuery 显示新数据

javascript - 使用嵌套形式初始化对象不起作用

json - 如何在 Perl 中将简单数组编码为 JSON?

javascript - react 原生 |由于 "react-native-google-signin"导致应用程序崩溃

android - 奇怪的 SOAP 响应,是 JSON 吗?如何解析它?

javascript - 模拟 Redux 操作中的函数