Javascript React钩子,为不同的变量声明相同的状态

Javascript React钩子,为不同的变量声明相同的状态,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,如果我有: function ExampleWithManyStates() { const [age, setAge] = useState(0); const [count, setCount] = useState(0); ... const [price, setPrince] = useState(0); 有没有办法将useState0设置为所有年龄、计数和价格 编辑:我试图解释我的例子,我并不是说数组分解应该像这样工作 const [ {a

如果我有:

function ExampleWithManyStates() {

    const [age, setAge] = useState(0);
    const [count, setCount] = useState(0);
    ...
    const [price, setPrince] = useState(0);
有没有办法将useState0设置为所有年龄、计数和价格

编辑:我试图解释我的例子,我并不是说数组分解应该像这样工作

    const [ {age, count, price}, {setAge, setCount, setPrice}] = useState(0);

单行方式?

您可以声明初始状态,然后将其应用于每个:

function ExampleWithManyStates() {

    const initialState = 0;

    const [age, setAge] = useState(initialState);
    const [count, setCount] = useState(initialState);
    ...
    const [price, setPrince] = useState(initialState);

但我不确定这样做是否有任何直接的好处-缺点是在不参考初始状态变量的情况下,无法清楚地查看每个项目的状态。如果您想整理或重用它,您可以编写自己的钩子:

const useStates = (count, initialValue) => {
  const states = []
  for (let i=0; i<count; i++) {
    states.push(useState(initialValue))
  }
  return states
}

const ExampleWithManyStates = () => {
  const [[age, setAge], [count, setCount], [price, setPrice]] = useStates(3, 0)
}

不确定这对于大多数用例来说是一个很好的模式,但我真的不知道你在尝试做什么。

你是在问你是否可以一次更新它们吗?不是更新,而是为每个状态声明初始状态0看起来这已经是你正在做的事情了……挂钩的工作是通过知道在每个渲染中调用它们的顺序来完成的。您需要调用useState三次,才能获得三个不同的状态值。其中一个选项可能是-这将允许您声明一个具有键age、count、price等的对象,然后根据单独的操作进行设置。这是可行的,但有点与第一个相反。@Emilebergron精神上是的,但是,如果你明白为什么会有这些指导方针,以及在幕后发生了什么,你绝对可以做到。@Emilebergron我也不提倡这种方法,只是把它作为一种可能的解决方案或教育机会。值得一提的是,您的示例将失败,出现一个非常明显的错误,即挂钩的数量与上次渲染时不同。我不知道你为什么觉得在任何情况下都有必要对这件事发表意见,特别是因为我已经指出了这种怀疑。我们同意这不是一个好的模式,我不是在争论,只是告诉任何人挂钩规则的存在是有原因的。祝你今天过得愉快;谢谢你的评论。我被否决了,但通过阅读评论和答案,我学到了很多。