【问题标题】:check all checkbox in react table检查反应表中的所有复选框
【发布时间】:2019-07-10 16:16:17
【问题描述】:

大家好,我是新手,我想了解如何在这个小应用程序中添加“全部切换”。

主要任务

给定一个 json 值,我必须在表格的复选框中显示该值。在我想实现“检查所有”功能后,这有助于我检查所有复选框。

问题

我不知道如何覆盖给定的 json 值

代码

import React from 'react';
import {getJson} from './getJson';

class TableComponent extends React.Component {
    constructor(props) {
      super(props)
      this.state = {
        checked: false,
        rows:[],
        json: []
      }
    }

    componentDidMount() {
      this.setState((prevState) => {
        return {
          json: getJson(),
        }
      })
    }

    checkboxHandler() {

      }

    render() {
      return (
        <div>
          <table>
            <tbody>
              {this.state.json.map((obj, i) => {
                return (
                  <tr key={obj.id}>
                    {obj.items.map((data, i) => {
                        return( 
                            <td key={data.id}> 
                                <p>{data.label}</p>
                                    <input 
                                        type="checkbox" 
                                        checked={data.value}
                                        onChange={this.checkboxHandler} 
                                    />
                            </td>
                        )
                    })}
                  </tr>
                )
              })}
            </tbody>
          </table>
        </div>
      )
    }
  }

  export default TableComponent;

我已经看过这些帖子了:

  1. Stackoverflow
  2. Second stackoverflow link

Json 信息

[{
            "id": "123",
            "items": [
              { "id": "231", label: "first", value: false },
              { "id": "4321", label: "second", value: true },
            ]
              }
          ];

【问题讨论】:

    标签: json reactjs checkbox jsx


    【解决方案1】:

    您可以mapjson 数组中的所有对象及其items 数组中的所有项目,并创建value 设置为true 的数组和对象的副本。

    示例

    function getJson() {
      return [
        {
          id: "123",
          items: [
            { id: "231", label: "first", value: false },
            { id: "4321", label: "second", value: true },
            { id: "1337", label: "third", value: false }
          ]
        }
      ];
    }
    
    class TableComponent extends React.Component {
      state = {
        checked: false,
        rows: [],
        json: getJson()
      };
    
      checkboxHandler() {}
    
      checkAll = () => {
        this.setState(prevState => {
          const json = prevState.json.map(obj => ({
            ...obj,
            items: obj.items.map(item => ({
              ...item,
              value: true
            }))
          }));
    
          return { json };
        });
      };
    
      render() {
        return (
          <div>
            <table>
              <tbody>
                {this.state.json.map((obj, i) => {
                  return (
                    <tr key={obj.id}>
                      {obj.items.map((data, j) => {
                        return (
                          <td key={data.id}>
                            <p>{data.label}</p>
                            <input
                              type="checkbox"
                              checked={data.value}
                              onChange={this.checkboxHandler}
                            />
                          </td>
                        );
                      })}
                    </tr>
                  );
                })}
              </tbody>
            </table>
            <button onClick={this.checkAll}>Check all</button>
          </div>
        );
      }
    }
    
    ReactDOM.render(<TableComponent />, document.getElementById("root"));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
    
    <div id="root"></div>

    【讨论】:

    • 对不起,如果我问另一个问题,但我不确定是否值得打开另一个话题。但如果我想勾选\取消勾选?
    • @Legeo 你可以例如在状态中使用您的checked 属性并使用它将所有values 设置为true/false 并在checkAll 中切换checked 值。或者您可以先检查是否有valuefalse,然后将它们全部设置为true,否则设置为false。如果您无法弄清楚,您可以提出一个新问题。
    • 我更喜欢花一些时间来获得它,然后再说话。真的谢谢你所做的一切!
    猜你喜欢
    • 1970-01-01
    • 2010-12-05
    • 2017-05-31
    • 2020-03-29
    • 2012-06-20
    • 2015-12-20
    • 2013-05-08
    • 2018-03-02
    相关资源
    最近更新 更多