Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么状态变量在useState中声明为常量?_Javascript_Reactjs_React Hooks - Fatal编程技术网

Javascript 为什么状态变量在useState中声明为常量?

Javascript 为什么状态变量在useState中声明为常量?,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,在React 16的useState hook官方文档中,计数状态及其setter函数声明为: const [count, setCount] = useState(0); 在提供的环境中 我的疑问是,为什么他们对状态变量使用const,而状态变量的值是可以更改的?在React中,不能直接对状态变量进行变异 在类组件中,您永远不会这样做。state.property='newvalue',而是使用这个.setState{property:'newvalue'}来提供一个新的引用 钩子也是一样。

在React 16的useState hook官方文档中,计数状态及其setter函数声明为:

const [count, setCount] = useState(0);
在提供的环境中


我的疑问是,为什么他们对状态变量使用const,而状态变量的值是可以更改的?

在React中,不能直接对状态变量进行变异

在类组件中,您永远不会这样做。state.property='newvalue',而是使用这个.setState{property:'newvalue'}来提供一个新的引用

钩子也是一样。您不会直接改变状态值,比如count=2,但必须使用setCount2让React知道状态已更改,React也可以批处理状态更新

如果您想更深入地了解,请查看“为什么React以这种方式工作”一文。提示:优化。

const[count,setCount]=useState0


您有一个state变量的副本,即使调用setCount,副本也不会更改。这实际上不是关于React,而是关于Flux。Flux是一个范例,它涉及到不可变状态的存储,并对状态应用操作以将其转换为不可变状态的新实例。

我猜是因为不应该在代码中更改它。您只能通过调用setcount而不是downvoter来更改count,但您的答案并没有解决OP的问题。他们在问为什么不能使用特定的框架/库更改不可变变量的值。框架/库React实际上不是问题所在,而是一些框架/库扩展Redux正在使用的底层状态管理范式。其他答案没有解决这个问题,而是将DOM操纵库React与状态管理库Redux合并。是的,我正在解决OPs的问题,并且比其他答案更深入到问题的核心。这与框架无关,OP是在问const…为什么他们使用const作为状态变量,当使用通量时,它的值可以改变,状态是不变的,所以你可以安全地使用const。这直接回答了问题,答案与状态管理范式有关。假设使用strict,任何对状态的更改都会在开发过程中被捕获,并且在使用Flux时会成为开发人员的错误。严格来说,这是一种约定,OP可以使用let,甚至可以重新分配count或setCount,而不会对不可变状态产生任何副作用。这将是可怕的代码气味,但它会工作。OP只是与不变性、常量和作用域混淆了,而您的答案并没有解决这些问题。