react 实现左边列表移动到右边列表

向右看齐 2023-06-28 08:51 66阅读 0赞

效果如图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01pZXZlcg_size_16_color_FFFFFF_t_70

具体代码:

  1. import React, { Component } from "react"
  2. class Main extends Component {
  3. constructor(props) {
  4. super(props);
  5. this.state = {
  6. checkboxItems: [
  7. { content: "A ", checked: false },
  8. { content: "B ", checked: false },
  9. { content: "C ", checked: false },
  10. { content: "D ", checked: false },
  11. { content: "E ", checked: false },
  12. { content: "F ", checked: false },
  13. { content: "G ", checked: false },
  14. { content: "H ", checked: false },
  15. { content: "I ", checked: false },
  16. { content: "J ", checked: false },
  17. { content: "K ", checked: false },
  18. ],
  19. checkedItems: [],
  20. }
  21. }
  22. render() {
  23. return (
  24. <div className="light">
  25. <div className="main-box">
  26. <ul className="left-selected">
  27. {
  28. this.state.checkboxItems.map((ele, index) => {
  29. return (
  30. <li key={index} id={"item" + index} onClick={() => this.leftItemClick(index)} className={ele.checked ? "item active" : "item"}>
  31. <input type="checkbox" name="items" checked={ele.checked} onChange={() => this.getVal(index)} />
  32. <label>{ele.content}</label>
  33. </li>
  34. )
  35. })
  36. }
  37. </ul>
  38. <div className="middle-convert">
  39. <button onClick={this.leftMove}><i className="icon-arrow-right"></i></button>
  40. <button onClick={this.rightMove}><i className="icon-arrow-left"></i></button>
  41. </div>
  42. <ul className="right-selected">
  43. {
  44. this.state.checkedItems.map((ele, index) => {
  45. return (
  46. <li key={index} onClick={() => this.rightItemClick(index)} className={ele.checked ? "item active" : "item"} >
  47. <input type="checkbox" name="checkedItems" checked={ele.checked} onChange={() => this.getSelected(index)} />
  48. <label>{ele.content}</label>
  49. </li>
  50. )
  51. })
  52. }
  53. </ul>
  54. </div>
  55. </div>
  56. );
  57. }
  58. getVal = (index) => {
  59. let items = [...this.state.checkboxItems];
  60. items[index].checked = !items[index].checked;
  61. this.setState({
  62. checkboxItems: items
  63. })
  64. }
  65. leftItemClick = (index) => {
  66. let items = [...this.state.checkboxItems];
  67. items[index].checked = !items[index].checked;
  68. this.setState({
  69. checkboxItems: items
  70. })
  71. }
  72. rightItemClick = (index) => {
  73. let items = [...this.state.checkedItems];
  74. items[index].checked = !items[index].checked;
  75. this.setState({
  76. checkedItems: items
  77. })
  78. }
  79. getSelected = (index) => {
  80. let items = [...this.state.checkedItems];
  81. items[index].checked = !items[index].checked;
  82. this.setState({
  83. checkedItems: items
  84. })
  85. }
  86. leftMove = () => {
  87. let items = [...this.state.checkboxItems];
  88. let selectedItems = [...this.state.checkedItems];
  89. let notSelect = [];
  90. items.map(item => {
  91. if (item.checked === true) {
  92. item.checked = false;
  93. return selectedItems.push(item);
  94. }
  95. else {
  96. return notSelect.push(item);
  97. }
  98. })
  99. this.setState({
  100. checkedItems: selectedItems,
  101. checkboxItems: notSelect,
  102. })
  103. }
  104. rightMove = () => {
  105. let items = [...this.state.checkboxItems];
  106. let selectedItems = [...this.state.checkedItems];
  107. let notSelect = [];
  108. selectedItems.map(item => {
  109. if (item.checked === true) {
  110. item.checked = false;
  111. return items.push(item);
  112. }
  113. else {
  114. return notSelect.push(item);
  115. }
  116. })
  117. this.setState({
  118. checkedItems: notSelect,
  119. checkboxItems: items,
  120. })
  121. }
  122. }
  123. export default Main

项目地址:

https://github.com/Miever1/react-multiChoice-shift

发表评论

表情:
评论列表 (有 0 条评论,66人围观)

还没有评论,来说两句吧...

相关阅读