import React from 'react'
import { Component } from 'react'
import "./cart.css"
// 纯显示的组件
function Cart({ carts }) {return (<div><table><tbody>{carts.map(cart => {return (<tr key={cart.id}><td>{cart.name}</td><td>{cart.price}</td><td>{cart.count}</td><td>{cart.count * cart.price}</td></tr>);})}</tbody></table></div>);
}// 购物车数据的设计
// {
//         name: "java",
//         price: 100,
//         count: 2
// }// 类的组件写法,都是jsx
export default class hello extends Component {constructor(props) {super(props);this.state = {val: "",goods: [{title: "java",price: 1000},{title: "php",price: 500}, {title: "python",price: 800}],carts: [{id: 1,name: "java",price: 100,count: 2}]}}changeVal(ev) {this.setState({...this.state,val: ev.target.value});}addGood(name) {var good = {title: name,price: 666}this.setState({val: "",goods: [...this.state.goods,good]});}addToCart(good) {console.log(good);let index = this.state.carts.findIndex(item => item.name == good.title);if (index !== -1) {// 修改操作let cart = this.state.carts[index];cart.count++;cart.name = good.titlethis.state.carts.splice(index, 1);// 若找到的话就修改操作this.setState({carts: [...this.state.carts,cart]});} else {//找不到添加操作var cart = {...good,count: 1,id: this.state.carts.length + 1,name: good.title}// 添加操作this.setState({carts: [...this.state.carts,cart]});}}render() {return (<div><input type='text' value={this.state.val} onChange={(event) => this.changeVal(event)}></input><button onClick={(ev) => this.addGood(this.state.val)}>submit</button><ul>{/* jsx 可以嵌套jsx  */this.state.goods.map(item => {return (<li key={item.title}>{item.title}<button onClick={(ev) => this.addToCart(item)}>添加</button></li>)})}</ul>{this.state.carts.length > 0 && <Cart carts={this.state.carts}></Cart>}</div>)}
}

我的设想就是购物车展示就是纯展示

而购物车数据,和商品数组都在父级中,这个和vue 差别有点大

数组中找元素,找到就返回对应的下标,找不多就返回-1

没有啥可说的,就是商品列表中,点添加到购物车,就添加进去了!

我记得我vue 也写过这个逻辑,所以业务逻辑一样的,只是写法不同!

结果展示

我发现展示结果不太对,于是我修改了下代码

这回展示结果如下:

react 购物车组件相关推荐

  1. React子组件给父组件传值, 父组件引用子组件并给子组件传值

    本博客代码是 React 父组件和子组件相互传值的 demo:实现封装一个折线图,折线图选择下拉框,获取下拉框点击的值并且传给父组件根据下拉框筛选的条件更新视图:效果图如下: 父组件代码: 代码解析: ...

  2. react测试组件_测试驱动的开发,功能和React组件

    react测试组件 This article is part of my studies on how to build sustainable and consistent software. In ...

  3. react创建组件_如何使用React创建时间轴组件

    react创建组件 These days I've been working on a new page for my website. I wanted to have a Timeline to ...

  4. react hooks使用_如何使用Hooks将React类组件转换为功能组件

    react hooks使用 by Balaganesh Damodaran 通过Balaganesh Damodaran 如何使用Hooks将React类组件转换为功能组件 (How to conve ...

  5. vue 新手指引_精通react/vue组件设计之快速实现一个可定制的进度条组件

    前言 这篇文章是笔者写组件设计的第四篇文章,之所以会写组件设计相关的文章,是因为作为一名前端优秀的前端工程师,面对各种繁琐而重复的工作,我们不应该按部就班的去"辛勤劳动",而是要根 ...

  6. React创建组件的三种方式及其区别

    React推出后,出于不同的原因先后出现三种定义react组件的方式,殊途同归:具体的三种方式: 函数式定义的无状态组件 es5原生方式React.createClass定义的组件 es6形式的ext ...

  7. React Native组件开发指南

    React Native的组件开发一直处在一个比较尴尬的处境.在官方未给予相关示例与脚手架的情况下,社区中依然诞生了许许多多的React Native组件.因为缺少示例与规范,很多组件库仅含有一个in ...

  8. react 调用组件方法_React源码分析1 — 组件和对象的创建(createClass,createElement)...

    1 组件的创建 学习了半年前端了,感觉前端的水确实也很深.做安卓的时候就对React-Native比较感兴趣,开发H5时也使用了一段时间的ReactJS.所以决定好好分析下它的源码.文章中有不对的地方 ...

  9. React的组件中的传值,及context上下文的使用

    React的组件之间互相传值 父子组件传值 兄弟组件传值 上下文context 父子组件传值 react 中父组件可以将数据作为子组件的属性进行传值,子组件通过 props 属性接收值. 父组件可以监 ...

最新文章

  1. 据说只有 Java 程序员才能看懂! | 每日趣闻
  2. maven上解决循环依赖、又不想新加第三模块的方法
  3. 【ABAP】模式(Pattern)创建与使用
  4. 数据库入门开发案例,真的是入门级别的!!看了不后悔。
  5. windows下nginx的安装及使用
  6. FJ的字符串java问题_蓝桥杯VIP试题 之 基础练习 FJ的字符串- JAVA
  7. python上传文件 request_Python request 上传文件
  8. docker选择安装路径_Docker安装
  9. 牛客练习赛23: D. 托米的咒语(暴力)
  10. 第十二届蓝桥杯题目和解答(C++B组)省赛
  11. Taro 周报 #7: 收获「e代驾」案例,发布 v2.2.16 和 v3.2.0-canary.2
  12. Android直连MySQL数据库
  13. 向量法计算体积的思路(没有代码了)
  14. Android分屏显示
  15. 浅谈估值模型:实现GGM的理想国(附代码)
  16. 不允许对系统目录进行即席更新_不被允许再更新安卓系统,华为手机用户怎么办?华为回应!...
  17. 用github写开源书籍
  18. Linux之scp命令的介绍以及命令行输入密码参数执行方法和常见问题解决
  19. 贪吃蛇大作战中的“马太效应”
  20. 使用redis实现缓存_用下一个js实现一个简单的redis缓存

热门文章

  1. 【博学谷学习记录】超强总结,用心分享 | 狂野大数据 | 环境 | hive搭建
  2. 第十五周翻译-《Pro SQL Server Internals, 2nd edition》
  3. lua与c#交互篇 | 合理用好lua+unity,更省性能的方案整理
  4. 去除bootstrap的table样式中单元格边框线
  5. 虚拟机(VMware Workstation或Hyper-V)装ghost版系统提示“ntldr is missing Press Ctrl+Alt+del to Resta
  6. android自定义插值器_自定义缓动插值器,可在Android中实现有意义的动作
  7. 矩阵的求秩:rank( )
  8. 证件照制作小程序源码下载-超级实用工具
  9. 什么是xmlhttp
  10. 互联网老兵谈中国早期黑客的历史(转载)