javascript - 使用 React,如何使变量的值动态化?

标签 javascript reactjs

我希望能够做到这一点:

for(let i = 0; i < this.props.user.cart.length; i++) {
  return (
    <div>
      {"products.desserts." + this.props.user.cart[i] + ".name"}
    </div>
  );
}

让 JSX 将其读取为对我的 json 的调用。相反,它只是吐出一个字符串。

它给出的字符串是 products.desserts.cakes.cake1.name,如果它实际访问我的 json 文件中的名称,这是正确的。

我看过一些关于动态变量名的资料,但我不确定这是否是正确的方向,因为我在尝试时不断遇到错误。 (顺便说一下,对 React 很陌生)

最佳答案

您可以使用字符串而不是点 . 访问对象键。

for(let i = 0; i < this.props.auth.cart.length; i++) {
  return (
    <div>
      {products.desserts[this.props.user.cart[i].name]}
    </div>
  );
}

编辑
作为您评论的跟进:

I want it to be accessing "products.desserts.cakes.cake1.name"

cakes.cake1 不是对象的有效键,因此您需要拆分数组中值的 . 并使用双括号。< br/> 所以在你的情况下:

{
  const splitedKeys = this.props.user.cart[i].split(".");
  const key1 = splitedKeys[0];
  const key2 = splitedKeys[1];
  products.desserts[key1][key2].name
}

一个简单的例子:

const products = {
  desserts: {
    cakes: {
      cake1: {
        name: 'cake 1'
      },
      cake2: {
        name: 'cake 2'
      }
    }
  }
}

const cart = ['cakes.cake1', 'cakes.cake2'];

cart.forEach((val) => {
  const splitedKeys = val.split('.'); // split the values by the "."
  const key1 = splitedKeys[0] // left side of the "."
  const key2 = splitedKeys[1] // right side of the "."
  console.log(products.desserts[key1][key2].name)
});

关于javascript - 使用 React,如何使变量的值动态化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46776917/

相关文章:

reactjs - 如何解决问题 : TypeError: self. env.emit 不是函数?

reactjs - 使用 ES6 设置初始 React 状态时,WebStorm 检查器会抛出警告

javascript - 使用 componentWillReceiveProps 更新组件中子 reactquill onChange() 的父组件

javascript - 带有点击事件的 Angular 指令被调用两次

javascript - 悬停元素时显示/隐藏级联菜单

javascript - ace 编辑器中的 Python 语法检查

javascript - 在面向客户的电子商务应用程序中使用 JavaScript 格式化日期

javascript - 如何在 MERN 堆栈中向用户显示错误

javascript - 上下文重新渲染太多

javascript - 在我的案例中如何使用 Angular 框架填充数据?