当前位置: 首页 > 知识库问答 >
问题:

变量声明中的反作用大括号[重复]

诸超
2023-03-14

最近,我按照react教程创建了一个模板项目,并一直在修改代码以满足我的需要。特别是,组件上的这段代码被传递了一个名为label的参数。

render() {
  const { label } = this.props;
  ...
}

在本例中,我从控制器返回了一个JSON对象,并使用名为rune的参数将其传递给该组件。runeJSON的一个属性是“name”,我想把这个名称分配给一个名为`label'的变量。给我带来麻烦的一件事是:

render() {
  console.log("Prop.runes.name: " + this.props.rune.name);
  const { label } = this.props.rune.name;
  console.log("Label: " + label);
  ...
}

第一个console.log(…)正确输出名称。但是,第二个日志未定义。经过一些尝试和错误之后,我发现如果我从const声明中删除大括号,名称将正确解析。

render() {
  const label = this.props.rune.name;
  ...
}

花括号最初是做什么的?教程最初有它们有什么原因吗?

共有3个答案

黎曾笑
2023-03-14
let {x} = {a: 10, b: 20, c: 30, d: 40}
console.log(x) // undefined

let {b} = {a: 10, b: 20, c: 30, d: 40}
console.log(b) // 10

console.log(c) // Error: c is not defined

本质上,const{tag}=this.props;是未定义的,因为对象this.props没有标签属性,因此它无法匹配它,根据我的x示例,但是在b示例中,它确实匹配一个属性,因此它被正确分配。

郝冥夜
2023-03-14

请尝试使用此代码

render() {
  console.log("Prop.runes.name: " + this.props.rune.name);
  const label = this.props.rune.name.label;
  console.log("Label: " + label);
  ...
}

您需要声明不带{}的变量标签

大括号用于分解结构

你可以在这里查一下

深度分解

鲍永春
2023-03-14

您在这里所问的问题实际上与React无关,而是与Javascript:disstructuringassignment有关。

对于对象,可以像这样破坏属性:

const obj = {
  name: "foo",
};

const { name } = obj;
console.log( name );

const name2 = obj.name;
console.log( name2 );
 类似资料:
  • 问题内容: 最近有人问我这在python中是什么意思: 我不知道。我以前从未见过。我检查了文档,没有类似的东西。一个人的建议是它是静态类型声明,但是在文档中也绝对没有任何内容。 有了以上,如果我 失败了 如果我可以,并且type(char)的结果是。但是它不能是静态声明,因为我可以并且type(char)变为。 所以我来这里是为了收集许多SO霸主的智慧。这意味着什么? 问题答案: 您正在查看变量的

  • 问题内容: 我正在为我的组织制定一些编程实践标准。这样做时,我遇到了“此问题的标题”问题 一些人发现最好尽早声明变量,而另一些人发现将它们放在方法的顶部以大括号开头为好。 Oracle Standard还表示要尽早声明它们。我也赞成在它们所属的最接近的花括号处声明它们。 值得关注的是 代码可读性 性能 更少的错误倾向 欢迎任何评论。 问题答案: 这就是麦康奈尔在必读的《代码完成2: 理想情况下,声

  • 问题内容: 如何在简短的变量声明中从其他块中重新声明变量? 关于此问题有很长的话题,但现在我很感兴趣如何解决此问题。 问题答案: 简短的变量声明的Go规范很明确: 短变量声明可以重新声明变量,只要它们最初是在同一块中以相同类型声明的,并且至少一个非空变量是新变量。 因此,在简短的变量声明中,您无法重新声明最初在其他块中声明的变量。 这是一个如何通过在内部块中声明局部变量()并将其()分配给在外部块

  • 问题内容: 当我在node.js中键入时,我得到了。 如果没有关键字,则通过(=> 15)。它可以在Chrome控制台中运行(带有和不带有关键字)。 问题答案: 使用时它在Node中不起作用,因为它是 当前模块 的 本地变量 。您应该直接引用它:。 不输入时,发生的事情现在 是整个Node进程中的全局变量 。 在Chrome浏览器(或其他任何浏览器中-我不确定oldIE …),无论您是否在示例中使

  • 问题内容: 我想知道为什么Java数组声明使用大括号而不是标准括号。如此处所示。我认为总体上可能需要进一步理解大括号,但这是我现在的议程。 相反,这是正确的。 问题答案: 圆括号通常表示集合和合奏,而圆括号通常表示类似C语言的参数。 很久以前,人们已经习惯了与C进行这种约定。我非常确定它可以在Java中以这种方式工作,以与旧语言保持某种语法一致性。

  • let和const是JavaScript里相对较新的变量声明方式。 像我们之前提到过的,let在很多方面与var是相似的,但是可以帮助大家避免在JavaScript里常见一些问题。 const是对let的一个增强,它能阻止对一个变量再次赋值。 因为TypeScript是JavaScript的超集,所以它本身就支持let和const。 下面我们会详细说明这些新的声明方式以及为什么推荐使用它们来代替v