Reactjs 状态初始化一个值数组

Posted

技术标签:

【中文标题】Reactjs 状态初始化一个值数组【英文标题】:Reactjs state initialize an array of values 【发布时间】:2019-06-22 14:59:38 【问题描述】:

我正在尝试初始化一个布尔值数组,其中数组中的特定位置有不同的值。

如果我这样初始化状态,空就是数组。

state = 
    activeItems: [...new Array(5)].map((item, idx) =>
      idx === 1 ? true : false
    )

【问题讨论】:

该问题未包含所有必要的详细信息。见***.com/help/mcve。 ... 的工作方式特定于未显示的设置。在禁用下层迭代的 TypeScript 中,它可能无法按预期工作。 【参考方案1】:

你必须先fill你的数组,然后再映射它:

state = 
    activeItems: new Array(5).fill().map((item, idx) => idx === 1)

const result = new Array(5).fill().map((item, idx) => idx === 1)
console.log(result)

还可以将idx === 1 ? true : false 简化为idx === 1,并且不需要解构数组。

【讨论】:

【参考方案2】:

Array from 为您提供<empty slots> 的数组

问题是因为map不迭代over empty spaces

let arr = new Array(5)

let modified = arr.map((e,i)=> console.log(i)) // prints nothing
console.log('modifed prints nothing')

使用填充填充空状态

let arr = new Array(5)

let modified = arr.fill(0).map((e,i)=> console.log(i))  //prints index

【讨论】:

【参考方案3】:

我不确定您为什么提到您的代码返回空数组。因为,它确实返回了预期的输出。

您可以改用Array.from 来避免您当前遇到的任何不一致:

const state = 
    activeItems: Array.from(length:5, (_, idx) => idx === 1)


console.log(state)

Array.from 的第二个参数是map 函数。

【讨论】:

【参考方案4】:

代码在原生 ES6 中开箱即用:

[...new Array(5)].map((item, idx) =>
  idx === 1 ? true : false
)

结果

[假,真,假,假,假]

数组。

与它的任何不一致都是由正在使用的转译器及其对... 数组扩展语法的实现引起的。在某些实现中,它可能会导致代码不兼容,尤其是禁用了 downlevelIteration 编译器选项的 TypeScript。例如,它用于 Stackblitz,甚至在 JS 项目中。如果没有下层迭代,它将被转换为:

new Array(5).slice().map(function (item, idx) 
    return idx === 1 ? true : false;
);

new Array(5).slice() 导致 sparse 数组不会被 map 迭代。这种情况可以通过使用Array.fromArray.fill 来保护(正如其他答案已经暗示的那样)。两者都将使用undefined 值填充稀疏数组,这些值可以使用map 进行迭代:

Array.from(new Array(5)).map((item, idx) => idx === 1);

new Array(5).fill().map((item, idx) => idx === 1);

【讨论】:

以上是关于Reactjs 状态初始化一个值数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Reactjs 中的状态对象内将值添加到数组中

reactjs - 如何在formik中将状态值传递给初始值

ReactJs:在使用动态 Taglist 时使用道具设置初始状态

ReactJS如何更新数组中对象的状态

ReactJS:为啥将组件初始状态传递给一个反模式?

基于 reactJS 中的 props 使用动态键初始化状态