javascript - Push方法将数组转换为组件状态中的数字

标签 javascript arrays reactjs state lifecycle

我有一个数字数组存储在组件的状态中,我正在尝试在 componentDidMount 方法的计时器内使用 setState 推送另一个数字以查看它在屏幕上如何变化。但是当计时器完成时,现有数组将被我在 Push 方法中作为参数传递的数字替换,而不是将其附加到数组中。

class Foo extends React.Component {
    constructor(props){
        super(props);
        this.state = {
            array : [1,2,3,4,5]
        }
    }

    componentDidMount(){
        setTimeout(()=>this.setState(prevState=>({
            array: prevState.array.push(6),
        })), 5000)
    }

    render(){
        const newArray = this.state.array;
        return(
            <div>{newArray}</div>
        );
    }
}

ReactDOM.render(<Foo />,document.getElementById('root'));

我可以使用展开运算符而不是推送来使其工作,但现在我想知道为什么它不能与推送一起工作。

最佳答案

Array.prototype.push 在推送项目后返回数组的长度,这就是为什么你会得到意外结果,你应该使用 Array.prototype.concat 代替添加元素后返回一个新数组

  setTimeout(()=>this.setState(prevState=>({
        array: prevState.array.concat(6),
  })), 5000)

关于javascript - Push方法将数组转换为组件状态中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59754101/

相关文章:

java - Array Can't Initialised Properly 它缺少 4 和 8 为什么在下面的代码中?

java - Java中long数组转int数组

reactjs - 在样式化组件中扩展样式时,有没有办法传递 props ?

reactjs - 在 React - Router 4 中查看/下载 Pdf 文件

javascript - 在上一个函数完成后发出调用函数

javascript - 如何从 json 中检索这些值?

javascript - 如何从函数中删除 jquery 过滤器

javascript - 错误找不到 `pages` 目录。请在项目根目录下创建一个”

javascript - 为什么我要在 document.write 中链接我的 jquery?

javascript - 从 Web SQL 数据库检索音频并使用 Web Audio API 播放