クリックされたときにチェックボックスの値を配列に追加します

ケダールデイブ

Stateで定義されている配列にユーザーIDを転送したいという状況があります。

チェックボックスをクリックして選択したときに実行し、チェックボックスの選択を解除したときに配列からユーザーIDを削除したい

import React, { Component } from "react";
import { 
    View,
    Text,
    StyleSheet,
    FlatList,
    AsyncStorage
    } from "react-native";
import axios from 'axios';
import { Button, Container, Content, Header, Body, Left, Right, Title } from 'native-base';
import Icon from 'react-native-vector-icons/Ionicons';
import { List, ListItem, SearchBar, CheckBox } from "react-native-elements";
    
    // const itemId = this.props.navigation.getParam('itemId', 'NO-ID');
    // const otherParam = this.props.navigation.getParam('otherParam', 'some default value');

    class TeacherSubjectSingle extends Component{
        static navigationOptions = {
            header : null
        }
        // static navigationOptions = {
        //     headerStyle: {
        //         backgroundColor: '#8E44AD',
        //       },
        //     headerTintColor: '#fff',
            
        // }

        state = {
            class_id: null,
            userid: null,
            usertype: null,
            student_list: [],
            faq : [],
            checked: [],
        }

        componentWillMount = async () => {
            const {class_id, student_list, userid, usertype} = this.props.navigation.state.params;
            await this.setState({
                class_id : class_id,
                student_list : student_list,
                userid : userid,
                usertype : usertype,
            })
            console.log(this.state.class_id)
            var result = student_list.filter(function( obj ) {
                return obj.class_section_name == class_id;
              });
            this.setState({
                student_list: result[0]
            })
            
        }

        renderSeparator = () => {
            return (
              <View
                style={{
                  height: 1,
                  width: "100%",
                  backgroundColor: "#CED0CE",
                }}
              />
            );
        };

        checkItem = (item) => {
            const { checked } = this.state;
            console.log(item)
            if (!checked.includes(item)) {
              this.setState({ checked: [...checked, item] });
              
            } else {
              this.setState({ checked: checked.filter(a => a !== item) });
            }
            console.log(checked)
        };

        render(){
            
            return (
                <Container>
                    <Header style={{ backgroundColor: "#8E44AD" }}>
                        <Left>
                            <Button transparent onPress={()=> this.props.navigation.navigate('ClassTeacher')}>
                                <Icon name="ios-arrow-dropleft" size={24} color='white' />
                            </Button>
                        </Left>
                        <Body>
                            <Title style={{ color: "white" }}>{this.state.class_id}</Title>
                        </Body>
                        <Right>
                            {this.state.checked.length !== 0 ? <Button transparent onPress={()=> this.props.navigation.navigate('ClassTeacher')}>
                                <Text>Start Chat</Text>
                            </Button> : null}
                        </Right>
                    </Header>
                    <View style={{flex: 1, backgroundColor: '#fff'}}>
                    <List containerStyle={{ borderTopWidth: 0, borderBottomWidth: 0 }}>
                    <FlatList
                        data={this.state.student_list.students}
                        extraData={this.state.checked}
                        renderItem={({ item }) => (
                        <ListItem
                            // roundAvatar
                            title={<CheckBox
                            title={item.name}
                            checkedColor='#8E44AD'
                            onPress={() => this.checkItem(item.userid)}
                            checked={this.state.checked.includes(item.userid)}
                            />}
                            // subtitle={item.email}
                            // avatar={{ uri: item.picture.thumbnail }}
                            //containerStyle={{ borderBottomWidth: 0 }}
                            onPress={()=>this.props.navigation.navigate('IndividualChat', {
                            rc_id: item.userid,
                            userid: this.state.userid,
                            usertype: this.state.usertype,
                            subject_name: this.state.student_list.subject_name
                            })}
                        />
                        )}
                        keyExtractor={item => item.userid}
                        ItemSeparatorComponent={this.renderSeparator}
                        
                    />
                    </List>
                    </View>
                </Container>
            );
        }
    }
export default TeacherSubjectSingle;

const styles = StyleSheet.create({
    container:{
    flex:1,
    alignItems:'center',
    justifyContent:'center'
    }
});

これは同じコードです。同じ関数checkItem()作成して機能しています。唯一の問題は、最初の項目をクリックすると空白の配列が出力され、2番目の項目を選択すると返されます。最初の項目を含む配列など。よろしくお願いします。

マヤンクシュクラ

this.state.checkedsetStateの直後に値を出力しているため、setStateは非同期であるため、状態値はすぐには更新されません。setStateコールバックメソッドを使用して、更新された状態値を確認できます。

このように書いてください:

checkItem = (item) => {
    const { checked } = this.state;
    let newArr = [];

    if (!checked.includes(item)) {
        newArr = [...checked, item];
    } else {
      newArr = checked.filter(a => a !== item);
    }
    this.setState({ checked: newArr }, () => console.log('updated state', newArr))
};

setStateの詳細については、次の回答を確認してください。

setStateメソッドを呼び出しても、状態がすぐに変更されないのはなぜですか?

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Vuetifyチェックボックス配列はリストが変更されたときにすべてのボックスをチェックします

分類Dev

jQueryはチェックされたチェックボックスの値を配列に取得します

分類Dev

wijmogrid列でチェックボックスがクリックされたときに列の値を渡す

分類Dev

複数のチェックボックスをループし、チェックされた値を配列に追加してSharepointに書き戻す

分類Dev

行がクリックされたときにCheckboxTreeViewerのチェックボックスを設定します

分類Dev

jqueryを介してチェックボックスのチェックされた値に追加します

分類Dev

テキストボックスの値を配列に追加し、これをリストボックスに表示します。ボタンがクリックされたときに配列を更新します

分類Dev

チェックされたチェックボックスをViewModelのリストに追加します

分類Dev

動的にチェックされたチェックボックスの値をリストに追加する

分類Dev

ロードされたときにRecyclerView内のチェックボックスをチェックします

分類Dev

チェックされたチェックボックスの配列から最初の値を取得します

分類Dev

チェックされたチェックボックスの値をreactjsの配列に保存する方法

分類Dev

PHPでチェックされたすべてのチェックボックスの値を取得し、それらを配列に配置します

分類Dev

チェックボックスがクリックされたときに行の値を送信してアクション クラスを構築する方法

分類Dev

チェックボックスでチェックされた値を取得し、リストに入れます

分類Dev

Ionicの送信時に、チェックされたチェックボックスの値を配列に保存します

分類Dev

内部のチェックボックスがクリックされたときにjQueryを使用してliを含むクラスを追加する

分類Dev

配列mysqlクエリのチェックボックス値がチェックされたときにPHPフォームがチェックされましたか?

分類Dev

Java: 別のチェックボックスがクリックされたときに JTable 内のチェックボックスを自動的に更新する

分類Dev

メインチェックボックスがクリックされたときにすべてのチェックボックスをオンにする

分類Dev

Jquery-チェックボックスがチェックされているときにテキストボックスの以前の値を取得します

分類Dev

別のチェックボックスがクリックされたときにチェックボックスを無効にする

分類Dev

チェックされたチェックボックスの値を配列として保存

分類Dev

親チェックボックスをクリックしたときにチェックされているすべてのチェックボックスをオンにします

分類Dev

「送信」をクリックすると、チェックボックスの値がjsに渡されます

分類Dev

動的に追加されたチェックボックスの値を取得する

分類Dev

チェックされたチェックボックスの値とその名前を2次元配列に格納します

分類Dev

jQuery-選択/チェックされたチェックボックスにクラスを追加します

分類Dev

リンクがクリックされたときにチェックボックスの選択を解除します

Related 関連記事

  1. 1

    Vuetifyチェックボックス配列はリストが変更されたときにすべてのボックスをチェックします

  2. 2

    jQueryはチェックされたチェックボックスの値を配列に取得します

  3. 3

    wijmogrid列でチェックボックスがクリックされたときに列の値を渡す

  4. 4

    複数のチェックボックスをループし、チェックされた値を配列に追加してSharepointに書き戻す

  5. 5

    行がクリックされたときにCheckboxTreeViewerのチェックボックスを設定します

  6. 6

    jqueryを介してチェックボックスのチェックされた値に追加します

  7. 7

    テキストボックスの値を配列に追加し、これをリストボックスに表示します。ボタンがクリックされたときに配列を更新します

  8. 8

    チェックされたチェックボックスをViewModelのリストに追加します

  9. 9

    動的にチェックされたチェックボックスの値をリストに追加する

  10. 10

    ロードされたときにRecyclerView内のチェックボックスをチェックします

  11. 11

    チェックされたチェックボックスの配列から最初の値を取得します

  12. 12

    チェックされたチェックボックスの値をreactjsの配列に保存する方法

  13. 13

    PHPでチェックされたすべてのチェックボックスの値を取得し、それらを配列に配置します

  14. 14

    チェックボックスがクリックされたときに行の値を送信してアクション クラスを構築する方法

  15. 15

    チェックボックスでチェックされた値を取得し、リストに入れます

  16. 16

    Ionicの送信時に、チェックされたチェックボックスの値を配列に保存します

  17. 17

    内部のチェックボックスがクリックされたときにjQueryを使用してliを含むクラスを追加する

  18. 18

    配列mysqlクエリのチェックボックス値がチェックされたときにPHPフォームがチェックされましたか?

  19. 19

    Java: 別のチェックボックスがクリックされたときに JTable 内のチェックボックスを自動的に更新する

  20. 20

    メインチェックボックスがクリックされたときにすべてのチェックボックスをオンにする

  21. 21

    Jquery-チェックボックスがチェックされているときにテキストボックスの以前の値を取得します

  22. 22

    別のチェックボックスがクリックされたときにチェックボックスを無効にする

  23. 23

    チェックされたチェックボックスの値を配列として保存

  24. 24

    親チェックボックスをクリックしたときにチェックされているすべてのチェックボックスをオンにします

  25. 25

    「送信」をクリックすると、チェックボックスの値がjsに渡されます

  26. 26

    動的に追加されたチェックボックスの値を取得する

  27. 27

    チェックされたチェックボックスの値とその名前を2次元配列に格納します

  28. 28

    jQuery-選択/チェックされたチェックボックスにクラスを追加します

  29. 29

    リンクがクリックされたときにチェックボックスの選択を解除します

ホットタグ

アーカイブ