【问题标题】:Why it is not showing error, when using const in useState hook为什么在 useState 挂钩中使用 const 时不显示错误
【发布时间】:2021-03-02 23:26:44
【问题描述】:

这是我完整的 React js 代码。我在“const [name, setName] =useState('Micheal');”中使用 const。当我使用 setName 函数更改名称时,它没有显示错误。由于javascript中的const意味着,它不能改变,为什么它没有显示任何错误

import React,{useState} from "react"
import ReactDOM from 'react-dom'
function Emp(){
  const [name,setName]=useState("Micheal");
  const [id,setId]=useState(1024);
  const [age,setAge]=useState(23);
  const handleClick=()=>{
    setName("Jackson");
    setId(2021);
    setAge(29);
  }
  return (
    <>
    <h1>Emp Details</h1>
    <h1>your name: {name}</h1>
    <h1>your id: {id}</h1>
    <h1>your age: {age}</h1>
    <button type="button" onClick={handleClick}>Click Here</button>
    </>
  );
}
ReactDOM.render(<Emp/>,document.getElementById('root'));

【问题讨论】:

  • 原因Emp被多次调用,每次变量可以保存不同的值。它们只是不能“在一个函数调用中”进行更改
  • @JonasWilms 但我们在 ReactDOM.render 中只调用一次 Emp 组件
  • 没有。 &lt;Emp/&gt; 不是电话。它将函数(和 props)交给 React 库,它可以随时调用它。
  • 这并不是const 的真正含义。这是为了防止您重新分配像const x = 3; x = 4 这样的实际变量;

标签: javascript reactjs


【解决方案1】:

const 表示无法重新分配标识符。 (不要与不可变值混淆。与真正的不可变数据类型(例如由 Immutable.js 和 Mori 生成的数据类型)不同,const 对象的属性可以发生变化。)

发件人:https://medium.com/javascript-scene/javascript-es6-var-let-or-const-ba58b8dcde75

例如:

const obj1 = {};
obj1.a = '12345'

console.log(obj1)

【讨论】:

    【解决方案2】:

    查看 React 文档中的这个示例:https://reactjs.org/docs/hooks-state.html#recap

    具体来说,这一行: Line 9: When the user clicks, we call setCount with a new value. React will then re-render the Example component, passing the new count value to it.

    例如,每次调用 setId 时,useState 都会为 id 返回一个新值,并重新渲染您的组件。它不仅仅是分配一个变量 - useState 有副作用,而且不仅仅是分配一个值。

    这并不违反const 的使用,因为 useState 在技术上返回一个新初始化的值并使用该值重新渲染。它不是双重分配、重命名或类似的东西。

    最后,const 还可以防止您在组件中错误地重新分配 useState 变量。

    【讨论】:

    • 这应该是公认的答案。 re-render 部分意味着 React 没有重新分配,所以只要 set 方法没有改变状态,const 就会保持不变。
    【解决方案3】:

    setState 是 React 的 API 钩子,我们这样称呼它:const [name, setName] =useState('Micheal');

    这是destructuring 赋值,name 是一个常量,引用你称为Micheal 的状态后面的对象,setName 是一个函数,用于通知 React 状态 Micheal 将发生变化,@987654327 @ 之后会有新的值,这样整个组件就会重新渲染...

    【讨论】:

      猜你喜欢
      • 2023-01-23
      • 2019-05-12
      • 2020-04-05
      • 2021-06-08
      • 2021-10-13
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      相关资源
      最近更新 更多