import React, { Component } from 'react';
import './App.css';
import {connect} from 'react-redux';
import {bindActionCreators} from 'redux';
import action from './shopcar/reduce/action'
// ui 组件 只取数据
class App extends Component {
constructor(props){
super(props);
this.addfriut = this.addfriut.bind(this);
this.allprice = this.allprice.bind(this);
this.state = {
n:
}
};
addfriut(){
this.props.add(this.goods.value,this.price.value);
this.goods.value='';
this.price.value =''
console.log(this.props);
};
allprice(){
console.log(this.props);
let {list} = this.props.myReducer;
let len = list.length;
let n = ;
for(let i=; i<len;i++){
n+= list[i].price*this.refs['goods'+i].value||
}
this.setState({
n
})
}
render() {
let {list} = this.props.myReducer;
return (
<div className="App">
名字:<input type="text" ref={goods=>this.goods=goods}/>
<br/>
价格:<input type="text" ref={price=>this.price=price}/>
<button onClick={this.addfriut}>addfriut</button>
<button onClick={this.allprice}>计算价格</button>
<ul>
{list.map((item)=>{
return (
<li key={item.id}>
<span>
水果:{item.goods} 价格:{item.price}
</span>
<input type="text" ref={'goods'+item.id}/>
</li>
)
})}
{this.state.n}
</ul>
</div>
);
}
}
// // 实现计算属性的操作 类似vuex getters
let mapStateToProps = (state)=>{ return state
};
// // 将dispatch传进去省区了actions 里的方法去 触发action的内置对象
let mapDispatchToProps = (dispatch)=>bindActionCreators(action,dispatch)
export default connect(mapStateToProps,mapDispatchToProps)(App);
// export default App;

shopcar/store.js

import {createStore,applyMiddleware} from 'redux';
import thunk from 'redux-thunk';
import reducer from './reduce'; let store = createStore(reducer,applyMiddleware(thunk)); export default store;

shopcar/reducer.js

import {combineReducers} from 'redux';
import myReducer from './reduce/reducer'; let reducer = combineReducers({
myReducer
}); export default reducer;

shopcar/reduce/state.js

let  state = {
list:[
{
id:,
goods:'橘子',
price:
},
{
id:,
goods:'蜜桃',
price:
},
{
id:,
goods:'葡萄',
price:
},
{
id:,
goods:'香蕉',
price:
}
],
count:
}
export default state;

shopcar/reduce/reducer.js

import _state from './state';

let reducer=(state=_state,action)=>{
let newState = {...state};
if(action.type==='ADD'){
action.obj.id = ++newState.count;
newState.list.push(action.obj)
}
return newState; } export default reducer;

shopcar/reduce/action.js

let action = {
add(goods,price){
return {
type:'ADD',
obj:{
goods,
price
}
}
},
pre(goods,price){
return (dispatch)=>{
dispatch({
type:'ADD',
obj:{
goods,
price
}
})
}
} } export default action;

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import {Provider} from 'react-redux'
//React-Redux 提供Provider组件,可以让容器组件拿到state
// import App from './power/withRouter';
// import store from './react-redux/store';
import store from './shopcar/store';
// import {BrowserRouter as Router} from 'react-router-dom'
import registerServiceWorker from './registerServiceWorker'; ReactDOM.render(
<Provider store={store}>
<App/>
</Provider>, document.getElementById('root'));
registerServiceWorker();

react购物车demo的更多相关文章

  1. 从DOM操作看Vue&React的前端组件化,顺带补齐React的demo

    前言 接上文:谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo 上次写完博客后,有朋友反应第一内容有点深,看着迷迷糊糊:第二是感觉没什么使用场景,太过业务化,还不如直接写Vue ...

  2. 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证

    原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证 chsakell分享了前端使用AngularJS,后端使用ASP. ...

  3. 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session

    原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session chsakell分享了前端使用AngularJS,后端使用ASP.NE ...

  4. 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(1)--后端

    原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(1)--后端 chsakell分享了前端使用AngularJS,后端使用ASP.NET Web API的购物车 ...

  5. Python实例---简单购物车Demo

    简单购物车Demo # version: python3.2.5 # author: 'FTL1012' # time: 2017/12/7 09:16 product_list = ( ['Java ...

  6. 谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo

    前言 前端已经过了单兵作战的时代了,现在一个稍微复杂一点的项目都需要几个人协同开发,一个战略级别的APP的话分工会更细,比如携程: 携程app = 机票频道 + 酒店频道 + 旅游频道 + ..... ...

  7. react dnd demo

    target import React ,{ Component } from 'react'; import { DropTarget } from 'react-dnd'; import Item ...

  8. 我的第一个 react redux demo

    最近学习react redux,先前看过了几本书和一些博客之类的,感觉还不错,比如<深入浅出react和redux>,<React全栈++Redux+Flux+webpack+Bab ...

  9. react购物车

    import React, { Component } from 'react';   import {Tabs} from './Tabs'   import 'whatwg-fetch'   im ...

随机推荐

  1. 【Teradata】数据库初始化(sysinit和dip工具)

    1.删除数据库对象 (1)使用root用户登录数据库节点 arcmain .LOGON 127.0.0.1/dbc,dbc_password; (2)清理所有数据库对象及数据 DELETE DATAB ...

  2. 从 0 → 1,学习Linux该这么开始!

    首先我们还是来普及以下概念,讲点虚的.现在是图形系统的天下,windows我们用了20多年.成功归功与它图形界面,你会点鼠标吗你会敲键盘吗?所以你会上网会聊天会玩游戏了.那么,0基础接触的Linux, ...

  3. centos7下kubernetes(10。kubernetes-daemonset)

    deployment部署得副本pod会分布在各个node上,每个node上可以运行很多个pod. daemonset的不同之处就在于,daemonset可以让每个node上只运行一个pod daemo ...

  4. 字符编码ASCII,Unicode 和 UTF-8

    一直对编码的概念很模糊,今天抽空突然想了解下,就找到了这个文章,看完真的豁然开朗,必须感谢阮一峰先生. 一.ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值.每一个二进制位(bit) ...

  5. UVA12107-Digit Puzzle(迭代加深搜索)

    Problem UVA12107-Digit Puzzle Accept:85  Submit:612 Time Limit: 3000 mSec  Problem Description  Inpu ...

  6. SSM框架整合(IntelliJ IDEA + maven + Spring + SpringMVC + MyBatis)

    本篇文章主要内容是介绍如何使用IntelliJ IDEA创建Spring + SpringMVC + MyBatis项目,下面会给出项目搭建的详细步骤以及相关的配置文件. 1. 创建maven项目   ...

  7. 转://linux下hugepages理解

    就Linux应用程序而言,使用的都是虚拟地址,当应用程序读写一个指定的虚拟地址时,内存管理单元会自动进行虚拟地址到物理地址的转换.一个虚拟地址可以映射到多个物理地址,但当前映射到哪一个物理地址取决于当 ...

  8. 11g SPA (sql Performance Analyze) 进行升级测试

    注;转自http://ju.outofmemory.cn/entry/77139 11G的新特性SPA(SQL Performance Analyze)现在被广泛的应用到升级和迁移的场景.当然还有一些 ...

  9. ssh原理图解

    SSH(Secure Shell)是一种能够以安全的方式提供远程登录的协议,也是目前远程管理Linux系统的首选方式.在此之前,远程登录一般常用FTP和Telnet,但是它们以明文的形式在网络中传输账 ...

  10. day 03 基本数据类型的使用、运算符

    一:基本数据类型的使用 1.为什么数据要区分类型 数据类型指的是变量值的类型,变量值是用来记录事物的状态的,而事物的状态具有不同的类型,不同类型的变量值表示不同类型的状态,所以数据要区分类型. 2.数 ...