简体   繁体   English

条件(动态)解构

[英]Conditional (dynamic) destructuring

Depending on the selected language, I need to destruct the object and get the desired value.根据所选的语言,我需要破坏对象并获得所需的值。
How do I do this so as not to destruct the entire object?我该怎么做才能不破坏整个对象?

const translate = {
   "navMenu1": {
      "en": "Menu 1",
      "ru": "Меню 1"
   },
   "navMenu2": {
      "en": "Menu 2",
      "ru": "Меню 2"
   },
   "navMenu3": {
      "en": "Menu 3",
      "ru": "Меню 3"
   }
}

const Header = props => {
  const { lang } = props;

  const {
    navMenu1,
    navMenu2,
    navMenu3
  } = translate;

  return (
    <header className={cnGreetingHeader}>
      <div>-Logo-</div>
      <nav className={cnNav}>
        <div className={cnItem}>{navMenu1[lang]}</div>
        <div className={cnItem}>{navMenu2[lang]}</div>
        <div className={cnItem}>{navMenu3[lang]}</div>
      </nav>
    </header>
  );
};

I want instead我想要

<div className={cnItem}>{navMenu1[lang]}</div> 

Use

<div className={cnItem}>{navMenu1}</div>

Important: I would like an answer that uses destructuring assignment, if possible.重要提示:如果可能,我想要一个使用解构赋值的答案。

Altougth you asked destructing, you can just map the object values, its more scalable, what happens when you have much more nav items?尽管您要求破坏,您可以只映射对象值,它更具可扩展性,当您有更多导航项目时会发生什么?

<nav className={cnNav}>
  {Object.values((navMenu) => (
    <div key={navMenu.id} className={cnItem}>
      {navMenu[lang]}
    </div>
  ))}
</nav>

You could take a nested destructuring and take the outer name as variable.您可以采用嵌套解构并将外部名称作为变量。

 const translate = { navMenu1: { en: "Menu 1", ru: "Меню 1" }, navMenu2: { en: "Menu 2", ru: "Меню 2" }, navMenu3: { en: "Menu 3", ru: "Меню 3" } }, Header = props => { const { lang } = props, { navMenu1: { [lang]: navMenu1 }, navMenu2: { [lang]: navMenu2 }, navMenu3: { [lang]: navMenu3 } } = translate; console.log(navMenu1); console.log(navMenu2); console.log(navMenu3); }; Header({ lang: 'en' });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM