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

跨页运算符 [重复]

向和歌
2023-03-14

我有来自youtube教程的代码,我无法弄清楚为什么我们需要括号(注释行),如果有人可以用简单的方式解释这段代码......谢谢

  const [{count, count2}, setCount] = useState({count: 10, count2: 20})

  return (
    <div className="App">
      <button onClick={ () => 
        setCount(
          currentState => (//can not understand
            {...currentState, count: currentState.count+1}
          )
        )}>+</button>
      <h5>Count 1: {count}</h5>
      <h5>Count2: {count2}</h5>
    </div>
  )

共有2个答案

施锋
2023-03-14

为什么我们需要括号

我想因为没有它们(),它将无法正常工作,即使在编译时也会引发错误。

setCount(
  currentState => (//can not understand
    {...currentState, count: currentState.count+1}
  )
)

setCount是setState挂钩。它有两种语法:

    < Li > < code > set count(newStateOfCount)(用直接值设置状态) < li> setCount( oldCount =

你的是第二个。回调返回一个对象,你有2个选项:

currentState => {
  return {
    ...currentState, 
    count: currentState.count+1
  }
} 

这比

currentState => ({
  ...currentState, 
  count: currentState.count+1
})

所以在教程中,他使用了第二种语法,因为它更简洁。

如果没有括号,它将无法工作:

currentState => {
  ...currentState, 
  count: currentState.count+1
}

因为解析器将理解< code>{是< code >函数体的开始,而不是< code >对象,所以如果不显式地给它< code>(),解析器将无法理解它

魏威
2023-03-14

这与点差运算符无关。

<代码>=

    < li >一个表达式 < li >一个街区

因为,在JavaScript中,{可以启动块或对象初始化器(这取决于上下文),所以在任何可以放置块但想要对象初始化器的地方,您都需要将其添加到()中,以便将{视为表达式的开始。

 类似资料:
  • 可能重复: 之间的差异 有人能解释一下

  • Rust可以让我们对某些运算符进行重载,这其中大部分的重载都是对std::ops下的trait进行重载而实现的。 重载加法 我们现在来实现一个只支持加法的阉割版复数: use std::ops::Add; #[derive(Debug)] struct Complex { a: f64, b: f64, } impl Add for Complex { type Outpu

  • 问题内容: 我知道golang不会提供运算符重载,因为它认为这会增加复杂性。 所以我想直接对结构实现。 https://play.golang.org/p/1U8omyF8-V 通过上面的代码, AddValue 可以按我的方式工作。但是,我唯一关心的是它是按值传递的,因此我每次必须返回新添加的值。 还有其他更好的方法,以避免返回汇总变量。 问题答案: 是的,使用指针接收器: 通过使用指针接收器,

  • 问题内容: 我已经使用JavaScript了几天,现在我想为定义的对象重载运算符。 在Google搜索了一段时间后,您似乎无法正式执行此操作,但是仍有一些人声称采取了一些漫长的方法来执行此操作。 基本上,我制作了Vector2类,并希望能够执行以下操作: 相反,我必须这样做: 我可以采用什么方法在Vector2类中重载运算符?因为这看起来很丑陋。 问题答案: 如您所见,JavaScript不支持运

  • 问题内容: 之间有什么区别 和 在TensorFlow中?用代替构造图形时,计算图形会有什么不同? 更一般而言, 张量或其他运算是否过载? 问题答案: 如果或中的至少一个是对象,则表达式和是等效的。您可能使用的主要原因是为创建的op指定一个显式的关键字参数,这对于重载的运算符版本是不可能的。 请注意,如果也不是(例如,如果它们是NumPy数组),那么将不会创建TensorFlow op。总是创建一

  • 主要内容:运算符重载的实现,可重载与不可重载的运算符C# 中支持运算符重载,所谓运算符重载就是我们可以使用自定义类型来重新定义 C# 中大多数运算符的功能。运算符重载需要通过 operator 关键字后跟运算符的形式来定义的,我们可以将被重新定义的运算符看作是具有特殊名称的函数,与其他函数一样,该函数也有返回值类型和参数列表,如下例所示: public static Box operator+ (Box b, Box c) {     Box bo