Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.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 React State Hook如何从ES6解构赋值中获取状态变量名_Javascript_Reactjs_Ecmascript 6_Destructuring - Fatal编程技术网

Javascript React State Hook如何从ES6解构赋值中获取状态变量名

Javascript React State Hook如何从ES6解构赋值中获取状态变量名,javascript,reactjs,ecmascript-6,destructuring,Javascript,Reactjs,Ecmascript 6,Destructuring,在React中,可以编写以下行来设置名为count的状态变量,然后编写setCount函数来设置值,如下所示: const [count, setCount] = useState(0); 这相当于写作: this.state = { count: 0 }; 我的问题是,useState()函数如何从ES6 Destructuring Assignment语句中获取状态变量的名称--count 销毁不是在函数返回其值之后发生的吗?或者,调用函数时,是否可以在函数内部动态获取正在被破坏的值 更

在React中,可以编写以下行来设置名为
count
的状态变量,然后编写
setCount
函数来设置值,如下所示:

const [count, setCount] = useState(0);
这相当于写作:

this.state = { count: 0 };
我的问题是,
useState()
函数如何从ES6 Destructuring Assignment语句中获取状态变量的名称--
count

销毁不是在函数返回其值之后发生的吗?或者,调用函数时,是否可以在函数内部动态获取正在被破坏的值

更新

请注意,我知道我可以解构为我想要的任何名称,但是
useState()
如何知道状态中应该包含哪些变量,以便以后使用

例如,如果我设置了两个状态变量,如果
useState()
函数不知道变量名,它如何区分这两个值

const [age, setAge] = useState(42);
const [fruit, setFruit] = useState('banana');

它返回一个你破坏的数组。数组的第一个索引是值,第二个索引是函数。通过数组分解,您可以为这些变量设置名称

例如:

const[one,two]=[“test”,()=>{console.log(1)}];
console.log(一)//将被测试
two()//将打印出1
详情如下:

useState
返回一个数组,其中第一个元素是值,第二个是setter,使用
de-structuring
可以为其指定任何名称

例如,上述代码相当于

const state = useState(0);
const count = state[0];
const setCount = state[1];

当您使用功能组件和useState时

const [myCountVariable, setCount] = useState(0);
您只能使用myCountVariable访问数据。此.state未使用

如果我理解正确,您不理解的是它如何知道写入'this.state.myCountVariable'——它不知道。该状态不会与实际变量名一起存储

正如上面我所说的,useState假设每次组件调用它时,它都会以相同的顺序调用它,因此它会基于索引返回“变量持有者”

在React文档中,您可以看到它们在React钩子规则中引用了以下内容:

只在顶层调用钩子 不要在循环、条件或嵌套函数中调用钩子。相反,总是在React函数的顶层使用钩子。通过遵循此规则,可以确保每次呈现组件时都以相同的顺序调用挂钩。这就是允许React在多个useState和useEffect调用之间正确保留挂钩状态的原因。(如果您感到好奇,我们将在下面对此进行深入解释。)

基本上

const [count, setCount] = useState(0);
更准确地表示为

componentStateContainer[currentStateIndex] = myStateVariable; //React doesn't know how you named your local variable
currentStateIndex++;
return [myStateVariable, setStateMethod]

(重新创建功能组件时,currentStateIndex将重置为0)

谢谢您的回答。请看一下我的最新问题。所以,这里的顺序很重要,对吗?那么状态将是一个数组?如果我们有多个状态变量,它将如何工作?useState中的数据类型是什么并不重要,返回数组的第一个元素是状态,第二个是setter。若state是一个对象,那个么第一个元素将是一个objectYes,这是正确的。我说的是设置多个状态变量,比如我更新的部分。但我想我现在已经找到了答案。谢谢@马迪迪考虑接受答案,回答你的问题,你可以阅读,了解钩子是如何工作的。hood@Tholle我想那正是我想要的!