【问题标题】:how to sum total on react如何汇总反应
【发布时间】:2020-10-03 20:45:21
【问题描述】:

我想将项目添加到总计中(添加价格)。因此,当我单击(添加到购物车)时,它只会添加商品数量,但我想准确添加(总和)价格。

    class BookStore extends Component {
        constructor(props){
            super(props);
            this.state = {
                total: 0,
                active: false, 

            }
            this.clicker = this.clicker.bind(this);

        }


    clicker() {
       let active = !this.state.active;
       this.setState({ 
           active: active, 
           total: this.state.total + 1

        })
    };


    render() {
        console.log(this.props.books);
        return (
            <div className='container'>
                <div className='row'>
                <span className='mt-4'>Total: {this.state.total}</span>
                    {this.props.books.map((book, i)=> {

                        return (
                            <>

                            <div className='col-12 card book-card' key={i}>
                                <div className='row'>
                                    <div className='col-8'>
                                        <h5>{book.name}</h5>
                                        <h6>$ {book.price}</h6>
                                    </div>

                                <div className='col-4'>
                                    <button onClick={this.clicker} className=' btn btn-success' style={{width: '50%', }}>add to cart</button>
                                </div>
                                </div>
                            </div>

                            </>
                        )
                    })}

                </div>
            </div>
        )
    }
}

那么我如何将该价格添加到与相应书籍相关的总计中。 (我的意思是,当我点击按钮时,我需要在 {this state total} 字段中显示总计

【问题讨论】:

标签: javascript reactjs components


【解决方案1】:

我不确定我的问题是否正确,但您是否尝试将图书价格传递给答题器功能并将其添加到总数中?如果是这样,这样的东西对你有用吗?

// ...

clicker(price) {
       let active = !this.state.active;
       this.setState({ 
           active: active, 
           total: this.state.total + price

        })
    };

// ...

<button onClick={() => this.clicker(book.price)} className=' btn btn-success' style={{width: '50%', }}>add to cart</button>

【讨论】:

    【解决方案2】:

    不确定我是否理解你的问题,但这里有一个使用你的代码的 React sn-p:

    class BookStore extends React.Component {
        state = {
            total: 0,
            active: false
        };
    
    
        clicker = (book) => () => {
           this.setState(state => ({ 
               active: !state.active, 
               total: state.total + book.price
           }));
        };
    
    
        render() {
          return (
              <div className='container'>
                  <div className='row'>
                  <span className='mt-4'>Total: {this.state.total}</span>
                      {this.props.books.map((book, i) => {
                          return (
                              <div className='col-12 card book-card' key={i}>
                                  <div className='row'>
                                      <div className='col-8'>
                                          <h5>{book.name}</h5>
                                          <h6>$ {book.price}</h6>
                                      </div>
    
                                    <div className='col-4'>
                                        <button onClick={this.clicker(book)} className=' btn btn-success' style={{width: '50%', }}>add to cart</button>
                                    </div>
                                  </div>
                              </div>
                          )
                      })}
                  </div>
              </div>
          )
      }
    }
    
    ReactDOM.render(
      <BookStore books={[{ name: "My Book", price: 20 }, { name: "My other Book", price: 50 }]} />,
      document.body
    );
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

    【讨论】:

      【解决方案3】:

      在您的 onClick 处理函数中,点击器发送价格作为参数。

      &lt;button onClick={() =&gt; this.clicker(book.price)} className=' btn btn-success' style={{width: '50%', }}&gt;add to cart&lt;/button&gt;

      然后您可以在您的点击器功能中访问图书价格。

      clicker(price) {
         this.setState({ 
             active: !this.state.active, 
             total: this.state.total + price
          })
      };
      

      【讨论】:

      • 您需要使用双箭头功能点击器:(price)=> ()=>{};
      • 你知道那个双箭头函数是什么意思吗?你试过用吗?
      • 好吧,看看你和我的区别..onClick={() =&gt; this.clicker(book.price)}这就是我将它分配给onClick的方式..这就是你的做法..onClick={this.clicker(book)}两者都是正确的..基本上当你编写两个箭头函数时,第一个箭头函数只返回第二个箭头函数。当 onClick 事件触发时,我的代码将调用两个函数,你的只会调用一个函数(两个箭头函数中的第二个)..
      猜你喜欢
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      • 1970-01-01
      • 2010-09-08
      相关资源
      最近更新 更多