javascript - 无法将项目推送到状态内的项目数组

标签 javascript arrays reactjs

如何将项目推送到状态内的项目数组。Addcartbutton组件将新项目添加到state.items。但是每次我添加新项目时state.items 未更新。 `

    import React from 'react';
    import Addtocartbutton from '../component/addcart';
    import Cart from '../component/cartlist';
    export default class Product extends React.Component {

    constructor() {
        super();
        this.state = {
            items: [],
            total: 0,
            currency: 'INR'
        }
        this.addtocart = this.addtocart.bind(this);
    }

    addtocart(data) {
        console.log(data);
        this.setState({
            items:[this.state.items,data]
        })
        console.log(this.state.items);
    }

    render() {
        var list = this.props.dataname;
        return (
            <div className="card hoverable">
                <div className="card-image">
                    <img src={list.image} alt={list.name} className='shop-img' />
                </div>
                <div className="card-content">
                    <span className="card-title blue-text text-darken-2">{list.price}&nbsp;{list.currency}</span>
                    <p>{list.name}</p>
                </div>
                <Addtocartbutton  onClick={this.addtocart.bind(this,list)} />
            </div>
        )
        return(
        <Cart datalist={this.props.items}/>
       )
      };


     }

尝试了 this.state.items.push() 但似乎根本不起作用。还有如何将项目数组作为 Prop 从产品组件传递到购物车组件。

import React from 'react';

export default class Cart extends React.Component {

    render() {
        let p = this.props.datalist;
        console.log(p);
        return (
            <ul className="collection">
                <li className="collection-item avatar">
                    <img src="#" alt="" className="circle" />
                    <span className="title">dfdfd</span>
                    <a href="#!" className="secondary-content"><i className="material-icons">grade</i></a>
                </li>
            </ul>
        )
    }
}

最佳答案

试试这个可能会有帮助

addtocart(data) {
    console.log(data);
    let items = this.state.items.slice();
    items.push(data);
    this.setState({
        items:items
    }, ()=> {
      console.log(this.state.items);
    })
    
}

方法步骤

1-首先我从 this.state.items.slice() 创建一个新变量,它将返回新的数组实例。

2-只需将数据插入数组并设置项目的状态

3-数组是 javascript 中的引用类型,要更新状态,您必须传递一个新数组,因此我传递新的 items 数组 (let items = this.state.items.slice();)

关于javascript - 无法将项目推送到状态内的项目数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50111067/

相关文章:

java - 在 Java 中用数组显示统计信息

javascript - 如何在for循环中返回一个减一的数组中的一个值

javascript - 为什么我在 for...of 循环中收到 'no-unused-vars' 警告,我该如何解决?

javascript - 在本地存储中存储复选框值

javascript - 在 JavaScript 函数中使用 $scope.go()

javascript - 确定异步请求完成的时刻

javascript - ES2015 模块与 ES5 全局变量由 'export' 关键字确定?

java - 数组上的同步未按预期显示结果

reactjs - 测试使用 try/catch 并调用 Image.getSize 的 React Native 组件的函数

javascript - React.js 是否以不同方式处理 "static"?复合成分