React Native-无法将CheckBox值传递到另一个屏幕

时间:2019-01-10 14:10:55

标签: javascript android reactjs react-native checkbox

我在这里问您如何将 CheckBox 值正确传递到其他屏幕?

例如,如果用户选中一个CheckBox,然后进入下一屏,则 CheckBox 的值应显示在该屏幕中。

但是在我的代码中,console.log的输出为false(我不明白为什么),一旦进入下一个屏幕,状态就不会真正通过,因为它的显示为空白。

这是我的代码

export default class tables extends Component {
constructor(props){
    super(props)
    this.state = {
        ...
        check: {},
        tbl_Merge: []
    }
}

proceed_TO_Category = () => {
    this.props.navigation.navigate('Category', {
        userName    : this.state.userName,
        DineIn      : this.state.DineIn,
        tbl         : this.state.tbl,
        tbl_2nd     : this.state.tbl_2nd,
        tbl_Merge   : this.state.tbl_Merge
    });
    console.log("CHECK ======> "+ this.state.tbl_Merge);
}

checkBox_Test = (table_NO) => {
    const tbl_Merge = this.state.tbl_Merge;
    const checkCopy = {...this.state.check}
    if (checkCopy[table_NO]) {
        checkCopy[table_NO] = false;
    } else {
        checkCopy[table_NO] = true;
    }
    this.setState({ check: checkCopy });
    this.setState({ tbl_Merge: table_NO == this.state.tbl_Merge });
}

render() {
    return(
         <View>
              ....
              <Flatlist
                    ....
                    <CheckBox
                       value = { this.state.check[item.tbl_id] }
                       onChange = {() => this.checkBox_Test(item.tbl_id) }
                    />
                    ....
              />
              ....
                    <View>
                        <TouchableOpacity
                            onPress = {() => this.proceed_TO_Category()}>
                            <Text>Categories</Text>
                        </TouchableOpacity>
                    </View>
         <View/>
    )
}
}

我的 proceded_TO_Category中的Console.log的屏幕截图。 Console.log

1 个答案:

答案 0 :(得分:0)

checkBox_Test = (table_NO) => {
    const tbl_Merge = this.state.tbl_Merge;
    const checkCopy = {...this.state.check}
    if (checkCopy[table_NO]) {
        checkCopy[table_NO] = false;
    } else {
        checkCopy[table_NO] = true;
    }
    this.setState({ check: checkCopy, tbl_Merge: table_NO == this.state.tbl_Merge }); // 1. Edit
}
  1. 编辑:我们不应该连续使用setState。因为setState是异步函数。如果要借助回调函数在setState过程之后调用函数,setState(update, callback);

  2. 您将tbl_Merge定义为数组,但是在将其设置为状态时,将其设置为布尔值。