CheckBox点击,无法改变选中与未选中的图标

来源:5-8 Popular(最热)模块的自定义标签功能实现-3

Mr_Chansheng

2018-08-26

CheckBox的代码如下,点击CheckBox时,并不能改变它的图标。但是数据却是有保存了,说明了点击事件是有效的,但是就是不能随着点击改变它的图标

//img.mukewang.com/szimg/5b82a0610001e50408500302.jpg

//img.mukewang.com/szimg/5b82a0aa0001422205350129.jpg

我怀疑是因为界面没有重新渲染,所以没有更新图标。于是又写了个demo。

constructor(props) {
    super(props);
    this.state = {
        isChecked: false,
    };
}

<CheckBox
    isChecked={this.state.isChecked}
    onClick={()=>{
        this.setState({
            isChecked: !this.state.isChecked,
        });
    }}
    leftText='CheckBox'
    checkedImage={<Image source={require('./img/ic_check_box.png')}
                         style={{tintColor: '#2196F3'}}/>}
    unCheckedImage={<Image source={require('./img/ic_check_box_outline_blank.png')}
                           style={{tintColor: '#2196F3'}}/>}
/>

这次在点击事件中改变state值,果然就有更新图标了。


看了源码中的onClick方法后很疑惑,

constructor(props) {
    super(props);
}

onClick() {
    this.setState({
        isChecked: !this.props.isChecked
    })
    this.props.onClick();
}

它在初始化中都没有设置state值,为什么在onClick中要去改变state值,这个应该是无效的吧?所以才造成了界面没有重新渲染。而且

onClick: PropTypes.func.isRequired,

onClick竟然是必须的,还没有默认值。如果不设置就报错。而我一开始认为的CheckBox是即使我不设置其他属性,我点击它,它也会有默认的图标切换。本人水平有限,希望老师能解答一下这样写法的好处,或者是为了什么作者要这样去写,从老师观点出发就好。

写回答

1回答

CrazyCodeBoy

2018-08-27

check下所实用的react-native-check-box版本是否正确:

  • 新版本RN使用react-native-check-box v2.1.2或以上版本;

  • 旧版RN实用react-native-check-box v2.0.2或以下版本;

提示:新版本react-native-check-box使用方式略有不同,详情参考:https://github.com/crazycodeboy/react-native-check-box


0
1
Mr_Chansheng
根据老师给的地址又去看了GitHub,才发现原来老师是作者哈。失敬失敬
2018-08-27
共1条回复

React Native技术精讲与高质量上线App开发

一个真实的上线项目,一次完整的开发过程,全面掌握React Native技术

1577 学习 · 727 问题

查看课程