React Native(Mobx單選實現(xiàn),2017-09-05)

1.CarItemState 3個函數(shù)(1)全選/反選 (2)勾選1個 (3)獲取選中的數(shù)組id
2.CartItem 左邊選擇按鈕+右邊顯示一個文字
3.CartItem里面的圖片要自己替換一下
4.可以設(shè)置默認(rèn)值
5.只能選中其中一個
6.不會渲染重復(fù)render

多選.gif
import {observable, useStrict, action, computed} from 'mobx';
// useStrict(true);//這里用到了嚴(yán)格模式厅贪,在修改類的成員屬性的時候函數(shù)前面需要加上 @action

export default class CarItemState {
    // 數(shù)據(jù)源
    @observable list = [];
    // 是否全選
    @observable checkedAll = false;//默認(rèn)不全選


    @action initData(responseData) {
        this.list = responseData
    };


    //獲取選中狀態(tài)
    getSelectArray(){
        let newArray = []
        for (let i = 0; i < this.list.length; i++) {
            let dict = this.list[i]

            if(dict.checked == true){
                newArray.push(dict.id);//請求參數(shù)
            }
        }

        return newArray;
    }

    // 勾選
    @action onChecked = (id) => {
        this.list.forEach(item => {
            if (item.id === id) {

                for (let i = 0; i < this.list.length; i++) {
                    let dict = this.list[i]
                    dict.checked = false;//可以根據(jù)服務(wù)器狀態(tài)進(jìn)行選中
                }

                item.checked ? this.checkedAll = false : null;
                item.checked = !item.checked;
            }
        });

    }


}

import React, {Component} from 'react';
import {observer} from 'mobx-react';

import {
    AppRegistry,
    StyleSheet,
    Text,
    View,
    Image,
    TouchableOpacity
} from 'react-native';

// 注意: 這里子組件必須監(jiān)聽
@observer
export default class CartItem extends Component {

    render() {
        const {data,store} = this.props;
        const checkIcon = data.checked ? require('./../images/common/chexkbox2.png') : require('./../images/common/chexkbox1.png')
        return (
            <View style={styles.rowContainer}>
                {this.renderLeftImage(data, store, checkIcon)}
                <Text>{data.id}</Text>
            </View>
        );
    }


    //左邊圖片選擇
    renderLeftImage(data, store, checkIcon) {
        return (
            <TouchableOpacity onPress={()=> {
                this.onPress(store, data)
            }}>
                <Image style={styles.thumb} source={checkIcon}/>
            </TouchableOpacity>
        )
    }

    onPress = (store, data)=> {
        store.onChecked(data.id)
        this.props.onPress ? this.props.onPress(store.getSelectArray()) : ()=> {}
    }


}

const styles = StyleSheet.create({
    thumb: {
        marginRight: 10
    },
    rowContainer: {
        flexDirection: 'row',
        padding: 10,
        height: 70,
        // justifyContent: 'center',
        alignItems: 'center',
        borderBottomWidth: 1,
        borderBottomColor: '#eef0f3'
    },
})
import React, {Component, PropTypes} from 'react'
import {
    View,
    Dimensions,
    ListView,
    TouchableOpacity,
} from 'react-native'

let {width, height} = Dimensions.get('window');
import {observer} from 'mobx-react';
import CarItem from './CarItem';
import CarItemState from './CarItemState';
const store = new CarItemState();

const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});

@observer
export default class TestListPage2 extends Component {

    //構(gòu)造函數(shù)
    constructor(props) {
        super(props)

        this.state = {
            dataSource: [],
        }
    }


    componentDidMount() {

        //模擬請求后臺返回的數(shù)據(jù)
        setTimeout(() => {
            //默認(rèn)選中第二個
            let responseData = [{id: 100,checked:false}, {id: 101,checked:true}, {id: 102,checked:false}]
            store.initData(responseData);
            this.setState({
                dataSource: responseData
            });
        }, 2000);
    }

    render() {
        console.warn('刷新了render')
        return (
            <View style={{flex: 1}}>
                <ListView
                    enableEmptySections={true}
                    renderRow={this.renderRow}
                    dataSource={ds.cloneWithRows(this.state.dataSource)}/>
            </View>
        );
    }


    renderRow = (rowData, sectionID, rowID, highlightRow) => {
        return (
            <CarItem  selectIndex={1}  data={store.list[rowID]} key={rowID} store={store} onPress={this.onPress}/>
        )
    }

    onPress = (arrayIDS)=> {
        console.warn(arrayIDS.join('-'))
    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疏咐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子院尔,更是在濱河造成了極大的恐慌箫荡,老刑警劉巖魁亦,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異羔挡,居然都是意外死亡洁奈,警方通過查閱死者的電腦和手機(jī)间唉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門介评,熙熙樓的掌柜王于貴愁眉苦臉地迎上來托猩,“玉大人,你說我怎么就攤上這事汉额∮∪” “怎么了被冒?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長轮蜕。 經(jīng)常有香客問我昨悼,道長,這世上最難降的妖魔是什么跃洛? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任率触,我火速辦了婚禮,結(jié)果婚禮上汇竭,老公的妹妹穿的比我還像新娘葱蝗。我一直安慰自己,他們只是感情好细燎,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布两曼。 她就那樣靜靜地躺著,像睡著了一般玻驻。 火紅的嫁衣襯著肌膚如雪悼凑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天击狮,我揣著相機(jī)與錄音佛析,去河邊找鬼益老。 笑死彪蓬,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捺萌。 我是一名探鬼主播档冬,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼桃纯!你這毒婦竟也來了酷誓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤态坦,失蹤者是張志新(化名)和其女友劉穎盐数,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伞梯,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡玫氢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年帚屉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漾峡。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡攻旦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出生逸,到底是詐尸還是另有隱情牢屋,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布槽袄,位于F島的核電站烙无,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏掰伸。R本人自食惡果不足惜皱炉,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狮鸭。 院中可真熱鬧合搅,春花似錦、人聲如沸歧蕉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惯退。三九已至赌髓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間催跪,已是汗流浹背锁蠕。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留懊蒸,地道東北人荣倾。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像骑丸,于是被迫代替她去往敵國和親舌仍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1.CarItemState 3個函數(shù)(1)全選/反選 (2)勾選1個 (3)獲取選中...
    蘋果雪梨渣閱讀 608評論 1 3
  • 前言 學(xué)習(xí)本系列內(nèi)容需要具備一定 HTML 開發(fā)基礎(chǔ)通危,沒有基礎(chǔ)的朋友可以先轉(zhuǎn)至 HTML快速入門(一) 學(xué)習(xí) 本人...
    珍此良辰閱讀 7,274評論 33 15
  • 原教程內(nèi)容詳見精益 React 學(xué)習(xí)指南铸豁,這只是我在學(xué)習(xí)過程中的一些閱讀筆記,個人覺得該教程講解深入淺出菊碟,比目前大...
    leonaxiong閱讀 2,810評論 1 18
  • 我是日記星球的114號星寶寶节芥,這是我的第134篇原創(chuàng)日記。 今天逆害,到黃梅婦幼學(xué)習(xí)头镊,很棒增炭! 現(xiàn)在,醫(yī)學(xué)的發(fā)展日新月異...
    書香天使閱讀 164評論 0 1
  • 西塘的夜晚非常寧靜拧晕。一大早隙姿,我被窗口透進(jìn)的一縷陽光叫醒。趕緊起床厂捞,和先生到外面去溜達(dá)一圈输玷。 西塘的早晨是質(zhì)樸的,干...
    葦絮輕揚(yáng)閱讀 180評論 0 5