<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        React-Native使用Mobx實現購物車功能

        來源:懂視網 責編:小采 時間:2020-11-27 22:30:01
        文檔

        React-Native使用Mobx實現購物車功能

        React-Native使用Mobx實現購物車功能:在工作中,購物車場景非常常見。本文實現基于React-Native和Mobx實現兩種購物車例子。 其中,后期會加入動畫等其他。本期先實現基礎功能。 二:基于State實現購物車 1-:ShoppingCarPage.js export default class ShoppingCarP
        推薦度:
        導讀React-Native使用Mobx實現購物車功能:在工作中,購物車場景非常常見。本文實現基于React-Native和Mobx實現兩種購物車例子。 其中,后期會加入動畫等其他。本期先實現基礎功能。 二:基于State實現購物車 1-:ShoppingCarPage.js export default class ShoppingCarP

        在工作中,購物車場景非常常見。本文實現基于React-Native和Mobx實現兩種購物車例子。

        其中,后期會加入動畫等其他。本期先實現基礎功能。

        二:基于State實現購物車

        1-:ShoppingCarPage.js

        export default class ShoppingCarPage extends Component {
         static navigationOptions = {
         headerTitle : '基于State購物車',
         };
        
         constructor(props) {
         super(props);
         this.state = {
         allSelecte : data.isAllSelect,
         totalMoney : data.totalMoney,
         }
        
         };
        
         getMoney = (m) => {
         this.state.totalMoney=this.state.totalMoney+m;
         //this.state.totalMoney += m;
         data.totalMoney = this.state.totalMoney;
         this.setState({
         totalMoney : this.state.totalMoney
         });
        
         let i = 0;
         data.datas.map((item) => {
         if (item.isSelect != true) {
         i += 1;
         }
         });
         if (i == 0) {
         data.isAllSelect = true;
         this.setState({ allSelecte : true })
         }
         else {
         data.isAllSelect = false;
         this.setState({ allSelecte : false })
         }
         };
        
         renderItem = (item) => {
         return (
         <ShoppingItemComponent
         itemData={item}
         money={this.getMoney}
         />
         )
         };
        
         allSelect = () => {
         data.totalMoney = 0;
         data.isAllSelect = !data.isAllSelect;
         this.state.totalMoney = 0;
         DeviceEventEmitter.emit('allSelect', !this.state.allSelecte);
         this.setState({ allSelecte : !this.state.allSelecte })
         };
        
         separatorView = () => {
         return (
         <View style={{ height : 10, backgroundColor : '#e9e9e9' }}/>
         )
         };
        
         keyExtractor = (item) => item.name;
        
         render() {
         let { allSelecte, totalMoney } = this.state;
         return (
         <View style={styles.container}>
         <FlatList data={data.datas}
         ItemSeparatorComponent={this.separatorView}
         renderItem={({ item }) => this.renderItem(item)}
         keyExtractor={ this.keyExtractor }
         />
         <View style={styles.tool}>
         <View style={{ flex : 1, flexDirection : 'row', alignItems : 'center' }}>
         <TouchableOpacity style={styles.select} onPress={ this.allSelect }>
         <Image source={allSelecte ? require('./imgs/login_radio_selected.png') : require('./imgs/login_radio_normall.png')}/>
         <Text style={{ marginLeft : 3 }}>全選</Text>
         </TouchableOpacity>
         <Text style={styles.allMoneyText}>
         ¥{this.state.totalMoney}
         </Text>
         </View>
         <TouchableOpacity style={styles.balance}>
         <Text style={styles.balanceText}>去結算</Text>
         </TouchableOpacity>
         </View>
        
        
         </View>
         );
         }
        }
        
        

        2-:ShoppingItemComponent.js

        export default class ShoppingItemComponent extends Component {
        
         static propTypes = {
         itemData : PropTypes.object.isRequired,
         money : PropTypes.func,
         };
        
         static defaultProps = {
         money : () => null,
         };
        
         componentDidMount() {
         this.subscription = DeviceEventEmitter.addListener('allSelect', (isSelAll) => {
         this.props.itemData.isSelect = isSelAll;
         this.setState({ isSel : isSelAll });
         if (isSelAll) {
         this.setMoney(this.state.money * this.state.selNum);
         }
        
         })
         };
        
         componentWillUnmount() {
         this.subscription && this.subscription.remove();
         };
        
         constructor(props) {
         super(props);
         this.state = {
         isSel : this.props.itemData.isSelect,
         selNum : this.props.itemData.count,
         money : this.props.itemData.money,
         name : this.props.itemData.name,
         description : this.props.itemData.description,
         img : this.props.itemData.img,
         }
         };
        
         itemSelect = (item) => {
         this.setState({isSel :!this.state.isSel},()=>{
         if (this.state.isSel) {
         this.setMoney(this.state.money * this.state.selNum)
         }
         else {
         this.setMoney(-this.state.money * this.state.selNum)
         }
         });
         };
        
         itemIncrease = (i) => {
         i++;
         this.setState({selNum : i},()=>{
         if (this.state.isSel) {
         this.setMoney(this.state.money)
         }else{
         this.setState({isSel :true});
         this.setMoney(this.state.money * this.state.selNum);
         }
         this.props.itemData.count = i;
         });
         };
        
         itemReduce = (i) => {
         if (i <= 1) {
         if(this.state.isSel){
         this.setState({isSel :!this.state.isSel});
         this.setMoney(-this.state.money)
         }
         return;
         }
         i--;
         this.setState({ selNum : i },()=>{
         if (this.state.isSel) {
         this.setMoney(-this.state.money)
         }else{
         this.setState({isSel :true});
         this.setMoney(this.state.money * this.state.selNum);
         }
         this.props.itemData.count = i;
         });
        
         };
        
         setMoney = (money) => {
         if (this.props.money) {
         this.props.money(money);
         }
         };
        
         render() {
         let { itemData } = this.props;
         let { isSel, selNum, money, name, description, img } = this.state;
         return (
         <View style={ styles.container }>
         <TouchableOpacity
         style={{ marginLeft : 15 }}
         onPress={() => this.itemSelect(itemData)}>
         <Image source={isSel ?
         require('./imgs/login_radio_selected.png')
         : require('./imgs/login_radio_normall.png')}/>
         </TouchableOpacity>
         <Image style={ styles.icon } source={{ uri : img }}/>
         <View style={ styles.right }>
         <Text style={ styles.nameStyle } numberOfLines={ 2 }>{ name }</Text>
         <Text style={ styles.descriptionStyle } numberOfLines={1}>{ description }</Text>
         <View style={ styles.right_bot}>
         < Text style={ styles.moneyStyle }>¥{ money }</Text>
         <View style={ styles.numControllStyle }>
        
         <TouchableOpacity style={ styles.reduceStyle } onPress={() => this.itemReduce(selNum)}>
         <Text style={{ color : selNum <= 1 ? 'red' : 'black' } }>-</Text>
         </TouchableOpacity>
         <View style={ styles.numberViewStyle }>
         <Text style={ styles.numberStyle }>{ selNum }</Text>
         </View>
         <TouchableOpacity style={ styles.increaseStyle } onPress={() => this.itemIncrease(selNum)}>
         <Text>+</Text>
         </TouchableOpacity>
         </View>
         </View>
         </View>
         </View>
         );
         }
        }
        
        

        三:基于Mobx實現購物車

        1-:MobxShoppingCarPage.js

        @observer
        export default class MobxShoppingCarPage extends Component {
         static navigationOptions = {
         headerTitle : '基于MobX購物車',
         };
        
         constructor(props) {
         super(props);
         this.data = new MobxStore();
         };
        
         componentDidMount() {
         this.data.replace(jsonData)
         };
        
         @action
         allSelect = () => {
         DeviceEventEmitter.emit('allSelect', !this.data.itemData.isAllSelect);
         this.data.selectAll();
         };
        
         renderItem = (item) => {
         return (
         <MobxShopItemComponent itemData={ item } data={ this.data }/>
         )
         };
        
         separatorView = () => {
         return (
         <View style={{ height : 10, backgroundColor : '#e9e9e9' }}/>
         )
         };
        
         keyExtractor = (item) => item.name;
        
         render() {
         return (
         <View style={ styles.container }>
         <FlatList data={ this.data.itemData.datas }
         ItemSeparatorComponent={ this.separatorView }
         renderItem={ ({ item }) => this.renderItem(item) }
         keyExtractor={ this.keyExtractor }
         />
         <View style={ styles.tool }>
         <View style={{ flex : 1, flexDirection : 'row', alignItems : 'center' }}>
         <TouchableOpacity style={ styles.select } onPress={ this.allSelect }>
         <Image source={ this.data.itemData.isAllSelect ?
         require('../imgs/login_radio_selected.png')
         : require('../imgs/login_radio_normall.png') }/>
         <Text style={{ marginLeft : 3 }}>全選</Text>
         </TouchableOpacity>
         <Text style={ styles.allMoneyText }>
         ¥{ this.data.itemData.totalMoney }
         </Text>
         </View>
         <TouchableOpacity style={ styles.balance } onPress={ this.allSelect }>
         <Text style={ styles.balanceText }>去結算</Text>
         </TouchableOpacity>
         </View>
         </View>
         );
         }
        }
        
        

        2-:MobxShopItemComponent.js

        @observer
        export default class MobxShopItemComponent extends Component {
        
         static propTypes = {
         itemData : PropTypes.object.isRequired,
         data : PropTypes.object.isRequired,
         };
        
         constructor(props) {
         super(props);
         this.itemData = this.props.itemData;
         }
        
         componentDidMount() {
         this.subscription = DeviceEventEmitter.addListener('allSelect', (isSelAll) => {
         this.itemData.isSelect = isSelAll;
         })
         };
        
         componentWillUnmount() {
         this.subscription && this.subscription.remove();
         };
        
         @action
         selectPress = () => {
         this.itemData.isSelect = !this.itemData.isSelect;
         let money = this.itemData.money * this.itemData.count;
         if (this.itemData.isSelect) {
         this.props.data.increase(money);
         }
         else {
         this.props.data.reduce(money)
         }
         this.props.data.itemPress();
         };
        
         @action
         increase = () => {
         this.itemData.count += 1;
         if (this.itemData.isSelect) {
         this.props.data.increase(this.itemData.money);
         }else{
         this.itemData.isSelect = !this.itemData.isSelect;
         this.props.data.increase(this.itemData.money * this.itemData.count);
         }
        
         };
        
         @action
         reduce = () => {
         if (this.itemData.count <= 1) {
         if(this.itemData.isSelect){
         this.itemData.isSelect = !this.itemData.isSelect;
         this.props.data.reduce(this.itemData.money);
         }
         return;
         }
         this.itemData.count -= 1;
         if (this.itemData.isSelect) {
         this.props.data.reduce(this.itemData.money);
         }
         };
        
         render() {
         return (
         <View style={ styles.container }>
         <TouchableOpacity
         style={{ marginLeft : 15 }}
         onPress={ this.selectPress }>
         <Image source={ this.itemData.isSelect ?
         require('../imgs/login_radio_selected.png')
         : require('../imgs/login_radio_normall.png') }/>
         </TouchableOpacity>
         <Image style={ styles.icon } source={{ uri : 'https://img10.360buyimg.com/n7/jfs/t4063/153/323373745/444727/87c24f22/58b11156N9be178c2.jpg' }}/>
         <View style={ styles.right }>
         <Text style={ styles.nameStyle } numberOfLines={ 2 }>{ this.itemData.name }</Text>
         <Text style={ styles.descriptionStyle } numberOfLines={1}> { this.itemData.description }</Text>
         <View style={ styles.right_bot}>
         < Text style={ styles.moneyStyle }>¥{ this.itemData.money }</Text>
         <View style={ styles.numControllStyle }>
         <TouchableOpacity style={ styles.reduceStyle } onPress={ this.reduce }>
         <Text style={{ color : this.itemData.count <= 1 ? 'red' : 'black' } }>-</Text>
         </TouchableOpacity>
         <View style={ styles.numberViewStyle }>
         <Text style={ styles.numberStyle }>{ this.itemData.count }</Text>
         </View>
         <TouchableOpacity style={ styles.increaseStyle } onPress={ this.increase }>
         <Text>+</Text>
         </TouchableOpacity>
         </View>
         </View>
         </View>
         </View>
         );
         }
        };
        
        

        3-:MobxStore.js

        import { observable, action, computed, autorun } from 'mobx';
        
        export default class MobxStore {
         @observable
         itemData = {}
        
         //設置數據
         replace = (data) => {
         this.itemData = data;
         }
        
         //按下的反選
         itemPress = () => {
         let i = 0;
         this.itemData.datas.map((item) => {
         if (item.isSelect != true) {
         i += 1;
         }
         });
         if (i == 0) {
         this.itemData.isAllSelect = true;
         }
         else {
         this.itemData.isAllSelect = false;
         }
         }
        
         //加
         increase = (money) => {
         this.itemData.totalMoney += money;
         }
        
         //減
         reduce = (money) => {
         this.itemData.totalMoney -= money;
         }
        
         //全選
         selectAll = () => {
         this.itemData.isAllSelect = !this.itemData.isAllSelect;
         this.itemData.totalMoney = 0;
         if (this.itemData.isAllSelect) {
         for (let i = 0;
         i < this.itemData.datas.length;
         i++) {
         this.itemData.totalMoney += this.itemData.datas[ i ].money * this.itemData.datas[ i ].count;
         }
         }
         }
        }
        
        

        四:

        1-:代碼github地址:https://github.com/erhutime/React-Navigation-All/tree/master/All/jscode/shoppingcar/src

        2-:下載完成后,修改index.ios.js:入口文件如下:

        運行效果如下:

        import App from './jscode/shoppingcar/src/App'
        AppRegistry.registerComponent('All', () => App);

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        React-Native使用Mobx實現購物車功能

        React-Native使用Mobx實現購物車功能:在工作中,購物車場景非常常見。本文實現基于React-Native和Mobx實現兩種購物車例子。 其中,后期會加入動畫等其他。本期先實現基礎功能。 二:基于State實現購物車 1-:ShoppingCarPage.js export default class ShoppingCarP
        推薦度:
        標簽: 購物車 實現 React
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲国产精品成人精品小说| 亚洲精品无码AV中文字幕电影网站 | 四虎国产精品永久免费网址 | 亚洲电影国产一区| 99久久国产精品免费一区二区| 理论片在线观看免费| 国产精品美女自在线观看免费| 狠狠色伊人亚洲综合网站色| 在线观看免费宅男视频| 亚洲AV电影天堂男人的天堂| 中文字幕无码免费久久| 亚洲av中文无码乱人伦在线咪咕| 三年片在线观看免费大全电影| 亚洲三级电影网址| 国产h视频在线观看免费| 精品国产日韩久久亚洲| 免费人成在线观看视频播放| a级毛片免费高清视频| 国产亚洲精品观看91在线| 99精品一区二区免费视频| 亚洲1区1区3区4区产品乱码芒果 | 亚洲欧洲日产韩国在线| 无码国产精品久久一区免费 | 九九九精品成人免费视频| 苍井空亚洲精品AA片在线播放| 亚洲精品视频在线看| 你懂的免费在线观看网站| 亚洲制服丝袜第一页| 全黄a免费一级毛片人人爱| 中文在线免费不卡视频| 亚洲高清视频在线播放| 成人性生交大片免费看中文| 中文字幕亚洲精品资源网| 日韩免费在线观看| 免费h视频在线观看| 一区二区亚洲精品精华液| 不卡精品国产_亚洲人成在线| 91免费播放人人爽人人快乐| 男男gay做爽爽免费视频| 久久久国产精品亚洲一区| 永久黄网站色视频免费观看|