为什么要在Javascript中设计一个使用const[]而不是const{}的库?

为什么要在Javascript中设计一个使用const[]而不是const{}的库?,javascript,reactjs,syntax,Javascript,Reactjs,Syntax,我曾使用const{…}在Javascript中进行对象分解,但最近我看到了一些使用const[…]进行数组分解的示例 例如,从: 在这种情况下,为什么要使用或更倾向于使用阵列分解?换句话说,他们为什么要设计useState函数以数组形式返回一对结果,而不是返回一个对象 对象解构的好处似乎在于它的命名、更熟悉、顺序独立。因此,您可以随意调用变量 const [bananas, setBananas] = useState(...) 如果是这样的话: const {bananas, setBa

我曾使用
const{…}
在Javascript中进行对象分解,但最近我看到了一些使用
const[…]
进行数组分解的示例

例如,从:

在这种情况下,为什么要使用或更倾向于使用阵列分解?换句话说,他们为什么要设计
useState
函数以数组形式返回一对结果,而不是返回一个对象


对象解构的好处似乎在于它的命名、更熟悉、顺序独立。

因此,您可以随意调用变量

const [bananas, setBananas] = useState(...)

如果是这样的话:

const {bananas, setBananas} = useState(...)
然后,
useState
将需要返回:

{
   bananas: (...),
   setBananas: (...)
}

每个想要
使用state
的开发人员都需要有一个名为
的变量,或者将其别名为其他变量,这比只返回数组要复杂得多

返回对象时,几乎总是需要将
状态
设置状态
别名

function App() {
  const {state: age, setState: setAge} = useState(0);
  const {state: name, setState: setName} = useState('');
}
返回数组时,只需将返回的状态命名为&setState

而且名称
state
setState
过于通用,在许多情况下都没有用处


但是,当您编写自己的自定义钩子返回状态/更新/调度程序时,在许多情况下返回一个对象更有意义。

您认为数组是什么意思。JavaScript没有额外的数据类型,但是它的异构数组工作得很好。正如你所说,这是一对结果,而不是一个数组

为什么要将一对结果作为数组返回,而不是返回一个对象

因为它简单。您不需要声明一些详细的类型(假设为TypeScript)并为属性命名。它不是一个
state使用{state:s,setState:s=>s}
结果,它是一个简单的
TupleS>
[s,s=>s]
(取决于您喜欢的语法)

这与我们在只有几个参数时使用的推理完全相同,只是应用了输出类型而不是输入类型

似乎对象解构的好处在于它的命名、更熟悉和顺序独立

数组解构比对象解构更简单,也应该很熟悉。当只处理两个结果值并且从不改变它们时,元组就更简单了。可以预期的是,一个人永远不需要添加另一个属性(在这种情况下,对象将更高级)。 没有属性名称使使用别名作为分解目标变得更容易(不那么冗长)。它迫使用户自己想出一个好的、适当的描述性变量名


它依赖于顺序并不重要,顺序只是遵循一些约定,如
[getter,setter]
[key,value]
,通常,您总是希望同时使用这两个值,因此在分解过程中省略属性没有任何好处。

如果我猜是因为它允许开发人员在变量命名方案中具有更大的灵活性。使用
{}
vs
[]
取决于方法返回的内容。。。。。“所以你可以随意调用变量”——你也可以用一个对象这样做:
const{state:bananas,setState:setBananas}=useState(…)
。但是您需要返回属性的名称,并且需要更多的代码来创建别名it@str是的,您可以,但是a)它过于冗长,b)它不鼓励用户使用别名属性,而是使用非描述性变量名。
function App() {
  const {state: age, setState: setAge} = useState(0);
  const {state: name, setState: setName} = useState('');
}