【问题标题】:Conditional (dynamic) destructuring条件(动态)解构
【发布时间】:2023-03-28 06:14:01
【问题描述】:

根据所选语言,我需要破坏对象并获得所需的值。
我该怎么做才能不破坏整个对象?

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>
  );
};

我想要代替

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

使用

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

重要提示:如果可能,我想要一个使用解构赋值的答案。

【问题讨论】:

    标签: javascript reactjs ecmascript-6 destructuring


    【解决方案1】:

    尽管您要求破坏,您可以只映射对象值,它更具可扩展性,当您拥有更多导航项时会发生什么?

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

    【讨论】:

      【解决方案2】:

      您可以采用嵌套解构并将外部名称作为变量。

      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' });

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-29
        • 2021-06-23
        • 1970-01-01
        • 2015-01-30
        • 2019-01-03
        • 2013-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多