checkbox.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. //import liraries
  2. import React, { Component } from 'react'
  3. import { View, Text, ListView } from 'react-native'
  4. import Checkbox from '../index'
  5. import CheckboxGroup from '../group'
  6. const mockinter = [
  7. { id: 1, value: 'aaa1-inter', isChecked: true },
  8. { id: 2, value: 'bbb2-inter', isChecked: false },
  9. { id: 3, value: 'ccc3-inter', isChecked: false },
  10. { id: 4, value: 'ddd4-inter', isChecked: false },
  11. { id: 5, value: 'eee5-inter', isChecked: true },
  12. ]
  13. const mockexter = [
  14. { id: 1, value: 'aaa1-exter', isChecked: true },
  15. { id: 2, value: 'bbb2-exter', isChecked: false },
  16. { id: 3, value: 'ccc3-exter', isChecked: false },
  17. { id: 4, value: 'ddd4-exter', isChecked: false },
  18. { id: 5, value: 'eee5-exter', isChecked: true },
  19. ]
  20. // create a component
  21. class CheckboxDemo extends Component {
  22. constructor() {
  23. super()
  24. this.state = {
  25. totalCheck: false,
  26. mockinter: mockinter,
  27. mockexter: mockexter,
  28. }
  29. this.ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 })
  30. }
  31. singleCheck(val, bool) {
  32. val.isChecked = bool
  33. let checkArr = []
  34. for (let data of this.state.mockexter) {
  35. checkArr.push(data.isChecked)
  36. }
  37. if (checkArr.indexOf(false) == -1) {
  38. this.setState({ totalCheck: true })
  39. } else {
  40. this.setState({ totalCheck: false })
  41. }
  42. }
  43. renderRow(val) {
  44. return (
  45. <Checkbox
  46. checked={val.isChecked}
  47. checkBoxColor={'red'}
  48. onChange={bool => this.singleCheck(val, bool)}
  49. label={
  50. <View
  51. style={{
  52. flex: 1,
  53. flexDirection: 'row',
  54. justifyContent: 'space-between',
  55. alignItems: 'center',
  56. paddingLeft: 5,
  57. }}
  58. >
  59. <Text>id:{val.id}</Text>
  60. <Text>value:{val.value}</Text>
  61. </View>
  62. }
  63. />
  64. )
  65. }
  66. totalChecked(bool) {
  67. const mock = this.state.mockexter
  68. for (let val of mock) {
  69. if (bool) {
  70. val.isChecked = true
  71. } else {
  72. val.isChecked = false
  73. }
  74. }
  75. this.setState({ mockexter: mock, totalCheck: !this.state.totalCheck })
  76. }
  77. renderLabel(data) {
  78. return (
  79. <View
  80. style={{
  81. flex: 1,
  82. flexDirection: 'row',
  83. justifyContent: 'space-between',
  84. alignItems: 'center',
  85. paddingLeft: 5,
  86. }}
  87. >
  88. <Text>id:{data.id}</Text>
  89. <Text>value:{data.value}</Text>
  90. </View>
  91. )
  92. }
  93. render() {
  94. return (
  95. <View>
  96. {/* 列表(外部实现全选) */}
  97. <View>
  98. <ListView
  99. dataSource={this.ds.cloneWithRows(this.state.mockexter)}
  100. renderRow={this.renderRow.bind(this)}
  101. />
  102. <Checkbox
  103. checkBoxColor={'red'}
  104. checked={this.state.totalCheck}
  105. onChange={bool => this.totalChecked(bool)}
  106. />
  107. </View>
  108. {/* 全选 组件内部实现*/}
  109. <CheckboxGroup
  110. // isRight={true}
  111. checkKey={'isChecked'}
  112. CheckboxData={this.state.mockinter}
  113. renderLabel={data => this.renderLabel(data)}
  114. />
  115. {/* 单个 */}
  116. <View style={{ flexDirection: 'row' }}>
  117. <Checkbox
  118. checked={true}
  119. // isRight={true}
  120. checkBoxColor={'blue'}
  121. size={20}
  122. labelStyle={{ width: 100 }}
  123. label={'qqqqasdsaqqqqasdsaqqqqasdsaqqqqasdsaqqqqasdsa'}
  124. cb={a => console.log(a)}
  125. />
  126. <View>
  127. <Text>111234</Text>
  128. </View>
  129. </View>
  130. </View>
  131. )
  132. }
  133. }
  134. //make this component available to the app
  135. export default CheckboxDemo