【问题标题】:React: Is there a way to refer to another object in the same component's constructor?React:有没有办法在同一个组件的构造函数中引用另一个对象?
【发布时间】:2019-04-10 13:16:11
【问题描述】:

我在同一个组件的 this.state 中有 2 个对象:

对象 1 是一组键:值对。
对象 2 是一个对象数组。每个内部对象再次包含一对 key: value,但其中一对应该引用存储在第一个对象中的值:

this.state = {
        Object 1: {
          key 1: 1,
          key 2: 2,
          key 3: 3
        },

        Object 2: [
            {
                key 1: "...",
                key 2: value of e.g. Object 1 - key 3
            },
            {
             ...
            }
        ]
    };

有没有办法直接从第二个对象引用第一个对象?我想到的唯一另一种方法是将第一个对象作为道具传递给另一个类,但这有点不切实际,因为这是理想情况下包含两个对象的顶级元素。

我不想将所有值存储在同一个对象中,因为两个对象都在不同的元素中呈现。

【问题讨论】:

  • 是的,你可以,但这有点取决于对象 1 和对象 2 之间的关系,以确定什么是最好的方法。所以我们需要一个具体的例子来了解在这种情况下什么是合适的。通常我会使用对象 1 中的键作为对象 2 中键 2 的值。如果使用对象 1 中键的值而不是键本身,则对象 1 一开始可能已经过时。
  • 当你开始需要在你的应用程序中做这些事情时,使用一个单独的库来管理你的应用程序状态(例如 redux)可能是一个好计划。在这种情况下,您可以直接从全局状态中提取任意数量的组件中的本地道具。
  • Shilly:对象 2 数组中第一个对象的键 2 应指向对象 1 的键 3 的值。 apokryfos:我打算这样做。理想情况下,我会通过 REST 和 Spring MVC 将它与 Java 后端连接起来,但到目前为止我还没有成功。
  • 为什么不对两者都使用局部变量(在构造函数内部)?我在您的问题中看不到任何解释为什么需要从对象 2 引用对象 1 的内容。我们缺少什么背景?
  • 我觉得这个答案stackoverflow.com/a/42437104/9203132 很有趣,它对我有用

标签: javascript reactjs state


【解决方案1】:

由于状态应该是可预测的可序列化的,恕我直言是在运行时为对象补水的更好解决方案:

this.state = {
        Object1: {
          key1: 1,
          key2: 2,
          key3: 3
        },

        Object2: [
            {
                key1: "...",
            },
        ]
    };
    

// Hydrate method
getObject2 = () => this.state.Object2.map(
  obj => ({...obj, key2: this.state.Object1.key3 })
)

console.log(getObject2());

// Simulating setState()
this.state.Object1.key3 = "Test"

console.log(getObject2());

【讨论】:

    【解决方案2】:

    你可能想尝试这样的事情:

    this.state = {}
    
    this.state.Object_1 = {
              key_1: 1,
              key_2: 2,
              key_3: "this is it",
            }
    
    this.state.Object_2 = [
                {
                    key_1: "...",
                    key_2: this.state.Object_1.key_3,
                },
                {
                 
                },
            ];
            
    console.log(this.state);

    【讨论】:

    • 这是我尝试的第一件事,我收到错误:“TypeError: Cannot read property '...' of undefined.”
    • 我又试了一遍还是不行,还是一样。 TypeError:无法读取未定义的属性“能力”
    猜你喜欢
    • 2021-08-15
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 2021-07-21
    • 2010-09-28
    • 2019-11-22
    相关资源
    最近更新 更多