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. Spring的jdbc模板2:使用开源的连接池

    上篇简要介绍了如何在spring中配置默认的连接池和jdbc模板,这篇来介绍开源的连接池配置与属性引入 C3P0连接池配置: 引入jar包 配置c3p0连接池 <?xml version=&qu ...

  2. input reset 重置时间

    经验规律,301毫秒. function autoFormatMoney() { if (!this.value.length) {return} var num = parseFloat(this. ...

  3. 【HNOI2016】树

    [HNOI2016]树 题目描述 每一个复制过来的子树(我们称为一个树团)有用的只有需要被访问的节点,包括根,根的父亲,要询问的点.我们只需要求出这些点到其所在树团根的距离以及倍增数组就好了. 需要讨 ...

  4. 路飞学城-Python开发集训-第4章

    学习心得: 学习笔记: 在python中一个py文件就是一个模块 模块好处: 1.提高可维护性 2.可重用 3.避免函数名和变量名冲突 模块分为三种: 1.内置标准模块(标准库),查看所有自带和第三方 ...

  5. (5)HomeAssistant mqtt-433-esp8266-arduino-传感器

    Home Assistant Integrations使用 https://github.com/1technophile/OpenMQTTGateway/wiki/Home-assistant-in ...

  6. 禁止 gVim 在 Linux 下自动生成 undo 文件 *.un~

    在配置文件 .vimrc 中加入配置项, set noundofile 完.

  7. Scarpy 起始url 自定义代理 自定义去重规则

    - start_urls - 内部原理 """ scrapy引擎来爬虫中去起始的URL: 1. 调用start_requests并获取返回值 2. v = iter(返回 ...

  8. keystone系列二:HTTP协议

    一 为何要学习HTTP协议 http协议就是通信的双方共同遵守的标准,就好比要合伙办事的两家公司签署的合同. openstack中各组件是基于restful api通信的,restful api可以单 ...

  9. 利用世界杯,读懂 Python 装饰器

    Python 装饰器是在面试过程高频被问到的问题,装饰器也是一个非常好用的特性, 熟练掌握装饰器会让你的编程思路更加宽广,程序也更加 pythonic. 今天就结合最近的世界杯带大家理解下装饰器. 德 ...

  10. 使用python进行utf9编码和解码

    在2005年4月1日(也就是愚人节),IEEE的rfc4042文件规定了utf9和utf18这2个所谓的Unicode的高效转换格式. 具体的格式说明,有兴趣的话点击上面的rfc4042链接去观看. ...