将动态生成的复选框添加到react-table并捕获行数据

2023-12-31

我在使用此反应表包向行添加复选框时遇到问题https://react-table.js.org/#/story/readme https://react-table.js.org/#/story/readme

我正在尝试向表中的每一行添加一个复选框。我尝试将“复选框”添加到列区域中看到的“单元格”值,但是,它似乎不适用于分页。一旦我单击下一页然后返回,它就会忘记所有以前检查过的产品。我如何维持他们的状态?

我添加了一个键,它可以防止在所有页面上检查该元素,但是,当我在页面上来回更改时,它不会记住它。所以我现在只需要存储它的“开启状态”。

Cell: rowInfo => (<Checkbox key={rowInfo.index} onChange={this.handleChange} />)

这是完整的代码:

import React from 'react'
import ReactDOM from 'react-dom'
import ReactTable from 'react-table'
import PropTypes from 'prop-types'
import { Checkbox } from '@shopify/polaris';

export default class ProductIndexTable extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
     rowInfo: '' 
    }
    this.handleChange = this.handleChange.bind(this)
  }
  handleChange(event) {
  }
  render() {
    function CreateItem(product) {
      return { 
        title: <a href={'/products/' + product.id} >{product.title}</a>,
        price_test_status: product.has_active_price_test,
        price_test_completion_percentage: product.price_test_completion_percentage
      }
    }
  return (<ReactTable
            data={this.props.products.map(CreateItem)}
            getTdProps={(state, rowInfo, column, instance) => {
              return {
                onClick: (e, handleOriginal) => {
                  // console.log('A Td Element was clicked!')
                  // console.log('it produced this event:', e)
                  // console.log('It was in this column:', column)
                  // console.log('It was in this row:', rowInfo)
                  // console.log('It was in this table instance:', instance)
                  this.setState({
                    rowInfo: rowInfo.index
                  })
                  // IMPORTANT! React-Table uses onClick internally to trigger
                  // events like expanding SubComponents and pivots.
                  // By default a custom 'onClick' handler will override this functionality.
                  // If you want to fire the original onClick handler, call the
                  // 'handleOriginal' function.
                  if (handleOriginal) {
                    handleOriginal()
                  }
                }
              }
            }}
            columns={[
            {
              Header: "Base",
              columns: [
                {
                  Header: <Checkbox />,
                  maxWidth: 50,
                  Cell: (<Checkbox onChange={this.handleChange} />)
                }, {
                  Header: "Product Title",
                  accessor: "title",
                  maxWidth: 400
                }, {
                  Header: "Price Test Status",
                  accessor: "price_test_status",
                  maxWidth: 200
                }, {
                  Header: "Price Test Completion Percentage",
                  accessor: "price_test_completion_percentage",
                  Cell: row => (
                    <div
                      style={{
                        width: '100%',
                        height: '100%',
                        backgroundColor: '#dadada',
                        borderRadius: '2px'
                      }}
                    >
                    <div
                      style={{
                        width: `${row.value}%`,
                        height: '100%',
                        backgroundColor: row.value > 66 ? '#85cc00'
                          : row.value > 33 ? '#ffbf00'
                          : '#ff2e00',
                        borderRadius: '2px',
                        transition: 'all .2s ease-out'
                      }}
                    />
                    </div>
                  )
                }
              ]
            }
            ]}
            defaultPageSize={10}
            className="-striped -highlight"
          />
  );}
}

我最终在单击时将标题存储到哈希中,这给了我最终的解决方案。它检查哈希状态以查看该值是否为真并应保持检查状态。请参阅下面的代码。希望它对其他人有帮助!另请检查我用来帮助我的 codepen 示例。

https://codepen.io/aaronschwartz/pen/WOOPRw?editors=0010 https://codepen.io/aaronschwartz/pen/WOOPRw?editors=0010

import React from 'react'
import ReactDOM from 'react-dom'
import ReactTable from 'react-table'
import PropTypes from 'prop-types'
import { Checkbox } from '@shopify/polaris';

export default class ProductIndexTable extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
     selected: {},
     selectAll: 0,
     products: this.props.products
    }
    this.toggleRow = this.toggleRow.bind(this);
  }
    toggleRow(title) {
        const newSelected = Object.assign({}, this.state.selected);
        newSelected[title] = !this.state.selected[title];
        this.setState({
            selected: newSelected,
            selectAll: 2
        });
    }
    toggleSelectAll() {
        let newSelected = {};
        if (this.state.selectAll === 0) {
            this.state.products.forEach(x => {
                newSelected[x.title] = true;
            });
        }
        this.setState({
            selected: newSelected,
            selectAll: this.state.selectAll === 0 ? 1 : 0
        });
    }

  render() {
    function CreateItem(product) {
      return { 
        title: <a href={'/products/' + product.id} >{product.title}</a>,
        price_test_status: product.has_active_price_test,
        price_test_completion_percentage: product.price_test_completion_percentage
      }
    }
  return (<ReactTable
            data={this.props.products.map(CreateItem)}
            columns={[
            {
              Header: "Base",
              columns: [
                {
                            id: "checkbox",
                            accessor: "",
                            Cell: ( rowInfo ) => {
                                return (
                                    <Checkbox
                                        type="checkbox"
                                        className="checkbox"
                                      checked={this.state.selected[rowInfo.original.title.props.children] === true}
                                        onChange={() => this.toggleRow(rowInfo.original.title.props.children)}
                                    />
                                );
                            },
                            Header: title => {
                                return (
                                    <Checkbox
                                        type="checkbox"
                                        className="checkbox"
                                        checked={this.state.selectAll === 1}
                                        ref={input => {
                                            if (input) {
                                                input.indeterminate = this.state.selectAll === 2;
                                            }
                                        }}
                                        onChange={() => this.toggleSelectAll()}
                                    />
                                );
                            },
                            sortable: false,
                            width: 45
                        },                
                {
                  Header: "Product Title",
                  accessor: "title",
                  maxWidth: 400
                }, {
                  Header: "Price Test Status",
                  accessor: "price_test_status",
                  maxWidth: 200
                }, {
                  Header: "Price Test Completion Percentage",
                  accessor: "price_test_completion_percentage",
                  Cell: row => (
                    <div
                      style={{
                        width: '100%',
                        height: '100%',
                        backgroundColor: '#dadada',
                        borderRadius: '2px'
                      }}
                    >
                    <div
                      style={{
                        width: `${row.value}%`,
                        height: '100%',
                        backgroundColor: row.value > 66 ? '#85cc00'
                          : row.value > 33 ? '#ffbf00'
                          : '#ff2e00',
                        borderRadius: '2px',
                        transition: 'all .2s ease-out'
                      }}
                    />
                    </div>
                  )
                }
              ]
            }
            ]}
            defaultPageSize={10}
            className="-striped -highlight"
          />
  );}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将动态生成的复选框添加到react-table并捕获行数据 的相关文章

  • 如何将值发布到输入框中?

    Intro I would like to get the current time after clicking at click and POST the value into input text box Note 假设包含引导样式表
  • 如何在React Native的MapView中设置标记

    我想在React Native中的MapView上设置一个标记 但是通过官方文档找不到任何信息MapView https facebook github io react native docs mapview html content 如
  • 将时间戳转换为一个数组

    在应用程序脚本 谷歌表中运行 我从 API 获取时间戳并返回此结果 1 6370611672429312E18 1 63706107263277082E18 我执行此代码并且工作正常 但问题不在数组中 我每次都需要它在数组中 const t
  • 更新存储在 chrome 扩展本地存储中的对象

    我正在开发一个 chrome 扩展 我将存储服务器发送的对象 例如 我将收到 命令 id 1 类型 A 大小 B 优先级 C 如果我有一个数据库 我会将其作为表中的一行插入commands 使用 chrome storage 我将这些对象的
  • 我可以在 GWT 中使用第三方 Javascript 库吗

    例如穆工具 用 js 编码对我来说很舒服 但显然不适合所有人 你当然可以 最好的事情就是给自己写一些好看的JavaScript 覆盖类型 http code google com webtoolkit doc latest DevGuide
  • Apache Thrift Java-Javascript 通信

    我正在编写一个基于 Apache Thrift 的 Java 服务器 它将从 Javascript 客户端接收数据 我已经完成了 Java 服务器 但问题是我可以获得 Javascript 客户端的工作示例 我无法找到一个好的示例 构建文档
  • 如何通过setTimeout函数定期打印数字?

    var i 0 function counter for i i lt 100 i setTimeout gt console log i 2000 counter 我想以 2 秒的间隔打印 i 但它立即打印 每次打印调用只需要几微秒 为什
  • Ant design Tabs onClick 函数

    我使用 Ant 设计创建了选项卡 在第二个选项卡中 当我单击我想要触发的按钮或更改为第一个选项卡时 有一个按钮 这是我的代码
  • .points 不透明度/大小在三个.js 内

    我回来回答有关 points 的第二个问题 这次想知道如何将不透明度从 0 更改为 1 然后又回到距发射器的特定像素距离内 var particleCount 14 particles new THREE Geometry pMateria
  • 通过 JavaScript 单击按钮/页面提交

    我想了解 asp net 框架如何知道何时单击了按钮 因此一旦收到请求 就会在服务器上触发其单击事件 我需要了解它是如何工作的 因为我想从 JavaScript 触发按钮的服务器单击事件 我能够从 JavaScript 执行页面提交 doc
  • 设置状态时重新渲染过多 - useSWR

    我在用useSWR https swr vercel app docs data fetching获取数据 然后使用数据 我想通过使用reduce 获得总计 如果我 console log 输出该值 它工作正常 但一旦我尝试使用该值设置状态
  • Angular 4 Http POST 不起作用

    我希望每个人都做得很好 我最近开始使用 Angular 4 4 我一直在尝试将数据发布到我的 api 服务器 但不幸的是它不起作用 我花了大约两天的时间 但仍然没有成功 甚至已经尝试过 6 7 篇文章角 io https angular i
  • 如何从 html 页面 [javascript] 调用 Web 服务方法而不刷新页面

    我有一个webservice这将返回一个值 我的要求是 我需要调用它webservice从一个index html页面 该页面有一个 html 提交按钮 在该按钮上单击我正在呼叫JavaScript 从那里我想调用网络方法 我怎样才能做到这
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • Firebase + Node.js:错误:找不到 XMLHttpRequest 兼容性库

    Firebase Node js On iOS 安装的 Node js npm 安装 firebase save 节点测试 js 其中 test js 是一个非常简单的连接到 Firebase 的脚本 var firebase requir
  • 如何将MathJax公式转换为img

    Mathjax 现在在我的项目中运行良好 但有一个问题 有没有办法将MathJax的公式 纯html和css 转换成img文件 我可以保存 MathJax 可以配置为生成 SVG 看http docs mathjax org en late
  • vuejs中如何获取组件编译后的html内容

    我有一个这样的组件
  • 如何在 React Native 中使用相同的 Firebase 数据库在两个应用程序之间进行通信?

    我有两个不同的应用程序使用相同的实时数据库 在第一个应用程序中 我发送的订单包含一些要保存在数据库中的数据字段 在另一个应用程序中 我只添加一个侦听器 firebase database ref userOrder currentUser
  • Graphql 将多个查询合并(组合)为一个?

    我正在尝试使用 JavaScript 将多个 GraphQL 查询合并为一个查询 我正在寻找这样的东西 let query3 mergeQueries query1 query2 我们事先不知道哪些查询将被组合 假设我有这样的查询 输入查询
  • jQuery Mobile + Admob:轮换?

    我使用 jQuery Mobile 框架创建了一个移动应用程序 所有页面都在index php中加载 使用 div 在每个页面的页脚中 我添加了Admob代码 div div div

随机推荐

  • 如何在 Lumen 中使用身份验证进行用户登录?为什么我在启动时看到“未经授权”?

    我有一个无法加载 显示的登录页面 用户名 密码输入 相反 启动应用程序时 显示的只是 未经授权 这是来自命令Authenticate php我已将其进一步包含在下面 My routes php app gt get PageControll
  • 获取前台应用程序图标转换为base64

    我正在尝试获取前台应用程序图标并将其转换为 base64 我可以获取前台应用程序的名称 但无法获取图标 当我对其进行编码时 我得到一个字符串 但它不是图标 我不确定我的错误在哪里 这是我的代码 public class RunningSer
  • 在 WCF REST 序列化之前将 System.IO.Stream 转换为数据传输对象?

    这个问题建立在之前的问题的基础上 尽管偏离主题 我昨天问过 https stackoverflow com questions 4889439 getting a type specific response from a wcf rest
  • postgresql中的round函数究竟是如何工作的?

    postgresql中的round函数实际上是如何工作的 下面的查询展示了奇怪的行为 SQL DEMO http rextester com IHQ94614 select val Round x val NUMERIC as NUMERI
  • 带有文件 I/O 和数组列表的 JTable

    在我的程序中 用户输入单词及其相应的定义 该用户定义对象的一个 示例是 面容 人脸 用户的单词存储在一个与文件 I O 一起使用的数组列表中 但是 每次我调用 prepareTable 方法时 程序 将文本文件中找到的单词的重复项添加到数组
  • URL 的正则表达式

    下面发布的正则表达式用于获取 URL 包括以下格式的 URL example com 但是 我希望它只获取具有www or http https等在前面 换句话说 它应该拾起www example com 它不应该拾取example com
  • TreeMap 中的键返回 null

    所以我有一个非常奇怪的错误 当我最初使用 keySet 迭代大型 TreeMap 的前 10 个键时 我偶然发现了它 其中一个键返回 null 据我的理解 这应该是不可能的 所以我写了下面的测试代码 int i 0 for Map Entr
  • 如何将双引号字符串与转义双引号字符匹配?

    我需要一个 Perl 正则表达式来匹配字符串 我假设只有双引号字符串 是文字引号字符 而不是字符串的结尾 而 是文字反斜杠字符 不应转义引号字符 如果不清楚 有些例子 string is 1 character long contains
  • Datastax cassandra 存在性能问题

    我已经在两台独立的机器上安装了 datastax Cassandra 一台具有 16GB RAM 另一台具有 32GB RAM 并采用大部分默认配置 我创建了一个包含大约 700 列的表 当我尝试使用 java 插入记录时 它每 30 秒能
  • ASP.Net MVC 操作结果是什么?

    是否有所有 ASP Net MVC 操作结果及其用途的列表 我一直忙于使用 ActionResult 来处理几乎所有事情 但我知道这是不正确的 我应该使用更具体的操作结果 我用谷歌搜索过这个但找不到列表 我们刚刚购买了 Wrox 的书 但距
  • 在 XAML 中访问 c​​ontroltemplate 中元素的属性

    我想使用由图像和标签组成的模板化 ComboBoxItems 如果我将模板分配给 ComboBoxItem 我可以以某种方式设置图像的源属性吗 目标是对不同的 ComboBoxItems 使用相同的模板 但每个 Item 中使用不同的图片
  • 使用 Google Drive Api v2 选择特定字段

    我有一个错误 Google Apis Requests RequestErrorInvalid field selection filesize 400 Errors Message Invalid field selection file
  • 如何检测变量值何时发生变化

    如何轻松检测变量值何时发生变化 我希望每当指定的变量更改值时 程序的执行就会在调试器上中断 现在我正在使用 Eclipse 的调试器 对于类或实例变量 右键单击大纲视图中的变量 选择 切换观察点 然后 在断点视图中 您可以右键单击生成的结果
  • G++ 为未使用的模板特化生成代码?

    在我正在处理的项目的一些序列化代码中 我有一个类型 其大小取决于编译器 为了解决这个问题 我决定使用模板专业化 效果很好 一切都在编译时解决 代码看起来有点像这样 不是真正的代码 只是一个例子 template
  • 角度种子 web-script.js 和 cors

    我已经第二天了 我试图从外部域获取一些 json 但我打破了 CORS 我几乎确定如何在 AngularJS 资源中使用 JSONP https stackoverflow com questions 20025711 how to use
  • 适用于 UWP 的 Google API 与自定义重定向方案配合不佳

    我正在编写一个可与 Google Drive API 配合使用的 UWP 应用程序 我的问题似乎出在 Google 针对 UWP 应用程序的糟糕文档 在文档中它指出 此外 您可以使用客户端 ID 的反向 DNS 概念作为自定义 URI 方案
  • 如何在WebView中打开视频播放器?

    我有一个带有 Webview 的 WebApp 在这些页面中 我有一些视频链接 MP4 3GP 当我点击链接时 没有任何反应 public class luxgateway extends Activity WebView myWebVie
  • 具有属性的 Maven 版本

    我有大约 400 个插件的大型 Maven Tycho 项目 我们在每个 POM 文件中指定了应用程序的版本 有没有一种方法可以仅在一个地方指定所有 POM s 的版本 我希望有些人会这样想
  • MySQL 中布尔值的 Boolean 与tinyint(1)

    在 MySQL 数据库中 哪种列类型最适合用于布尔值 我用boolean但我的同事使用tinyint 1 这些数据类型是同义词
  • 将动态生成的复选框添加到react-table并捕获行数据

    我在使用此反应表包向行添加复选框时遇到问题https react table js org story readme https react table js org story readme 我正在尝试向表中的每一行添加一个复选框 我尝试