javascript - 数组拼接正在创建一个空白数组

标签 javascript arrays reactjs

我有以下 react 代码

     constructor(props) {
        super(props);
        this.state = {registrations: [{firstName: "foo", lastName: "bar", activity: "Science Lab", restrictions: "a,b,c"}]}
     }
     addRegistration(registration) {
        console.log('came inside event handler to add registration')
        console.log(registration)
        console.log('existing state')
        console.dir(this.state.registrations)            
        var newState = this.state.registrations.splice() // copy
        console.dir(newState)
        newState.push(registration)
        console.log(newState)
        this.setState({registrations: newState})
    }

当我运行代码并调用 addRegistration 事件处理程序时,我会看到以下输出

[Log] {firstName: "Foo", lastName: "Bar", activity: "Swimming", restrictions: "a,b"} (Registration.html, line 404)
[Log] existing state (Registration.html, line 405)
[Log] [Object] (1) (Registration.html, line 406)
[Log] [] (0) (Registration.html, line 408)
[Log] [Object] (1) (Registration.html, line 410)

所以我得到一个有效的注册对象作为输入参数。在日志的第三个条目中,我们看到现有状态有一个大小为 1 的数组。(这是构造函数中的 foo 对象

接下来我们看到对 this.state.registrations.splice() 的调用创建了一个空数组。然后将作为参数接收到的新注册对象插入创建的空数组中,从而创建另一个大小为 1 的数组。

我不明白为什么 splice() 创建一个空数组。它应该返回给我现有状态的副本,然后推送应该导致数组大小为 2。

我错过了什么?

最佳答案

splice返回已删除元素的数组,而 slice()方法将数组的一部分的浅拷贝返回到从 beginend (不包括 end)选择的新数组对象中。您可以使用扩展运算符语法或使用切片来创建数组的副本

var newState = this.state.registrations.slice() 

var newState = [...this.state.registrations]

关于javascript - 数组拼接正在创建一个空白数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49341140/

相关文章:

javascript - react 路由器: component not updating on url search param change

javascript - 如何修改android & iOS项目,使入口文件成为react native中的普通js文件?

javascript - 是否有多个 onmouseup 事件处理程序有效的 html?

javascript - 从 angularjs 调用 RESTful 服务的正确方法

c - 如何访问结构数组中的元素(非全局)

java - 对象数组与索引列表+数组

java - 以表格格式打印数组

reactjs - 如何在 MSAL 中使用客户端 key 获取 Azure 访问 token ?

javascript - 无法获取变量以传递给 JavaScript 中的数组

javascript - react redux normalizr : how to deal with nested entities?