Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

755
Views
Seleccione la fila al hacer clic en la tabla de reacción

Estoy tratando de encontrar la mejor tabla para usar con mis aplicaciones de reacción y, por ahora, la tabla de reacción ofrece todo lo que necesito (paginación, control del lado del servidor, filtrado, clasificación, fila de pie de página).

Dicho esto, parece que no puedo seleccionar una fila. No hay ejemplos que lo demuestren.

Algunas cosas que he intentado incluyen intentar establecer un nombre de clase al hacer clic en la fila. Pero parece que no puedo encontrar el elemento de llamada en e t . Además, no me gusta este enfoque, porque no es cómo una aplicación de reacción debería hacer las cosas.

 <ReactTable ... getTrProps={(state, rowInfo, column, instance) => { return { onClick: (e, t) => { t.srcElement.classList.add('active') }, style: { } } }} />

Una posible solución sería mostrar casillas de verificación como una primera columna, pero esto no es óptimo ya que limita el área para hacer clic para "activar" la fila. Además, la retroalimentación visual será menos expresiva.

¿Me estoy perdiendo el elefante en la habitación? Y si no, ¿conoce otra biblioteca que admita las cosas que describí anteriormente?

¡Gracias!

EDITAR: Otra opción, al ser de código abierto, es sugerir una edición. Y tal vez esto sea lo correcto.

EDITAR 2

Otra cosa, sugerida por Davorin Ruševljan en los comentarios, pero no pude hacer que funcionara fue:

 onRowClick(e, t, rowInfo) { this.setState((oldState) => { let data = oldState.data.slice(); let copy = Object.assign({}, data[rowInfo.index]); copy.selected = true; copy.FirstName = "selected"; data[rowInfo.index] = copy; return { data: data, } }) } .... getTrProps={(state, rowInfo, column) => { return { onClick: (e, t) => { this.onRowClick(e, t, rowInfo) }, style: { background: rowInfo && rowInfo.row.selected ? 'green' : 'red' } } }}

Esto establece la columna 'Nombre' en 'seleccionado', pero no establece la clase en 'verde'

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Encontré la solución después de algunos intentos, espero que esto pueda ayudarte. Agregue lo siguiente a su componente <ReactTable> :

 getTrProps={(state, rowInfo) => { if (rowInfo && rowInfo.row) { return { onClick: (e) => { this.setState({ selected: rowInfo.index }) }, style: { background: rowInfo.index === this.state.selected ? '#00afec' : 'white', color: rowInfo.index === this.state.selected ? 'white' : 'black' } } }else{ return {} } }

En su state , no olvide agregar un valor selected nulo, como:

 state = { selected: null }
over 4 years ago · Santiago Trujillo Report

0

Hay un HOC incluido para React-Table que permite la selección, incluso al filtrar y paginar la tabla, la configuración es un poco más avanzada que la tabla básica, así que primero lea la información en el enlace a continuación.


ingrese la descripción de la imagen aquí



Después de importar el HOC, puede usarlo así con los métodos necesarios:

 /** * Toggle a single checkbox for select table */ toggleSelection(key: number, shift: string, row: string) { // start off with the existing state let selection = [...this.state.selection]; const keyIndex = selection.indexOf(key); // check to see if the key exists if (keyIndex >= 0) { // it does exist so we will remove it using destructing selection = [ ...selection.slice(0, keyIndex), ...selection.slice(keyIndex + 1) ]; } else { // it does not exist so add it selection.push(key); } // update the state this.setState({ selection }); } /** * Toggle all checkboxes for select table */ toggleAll() { const selectAll = !this.state.selectAll; const selection = []; if (selectAll) { // we need to get at the internals of ReactTable const wrappedInstance = this.checkboxTable.getWrappedInstance(); // the 'sortedData' property contains the currently accessible records based on the filter and sort const currentRecords = wrappedInstance.getResolvedState().sortedData; // we just push all the IDs onto the selection array currentRecords.forEach(item => { selection.push(item._original._id); }); } this.setState({ selectAll, selection }); } /** * Whether or not a row is selected for select table */ isSelected(key: number) { return this.state.selection.includes(key); } <CheckboxTable ref={r => (this.checkboxTable = r)} toggleSelection={this.toggleSelection} selectAll={this.state.selectAll} toggleAll={this.toggleAll} selectType="checkbox" isSelected={this.isSelected} data={data} columns={columns} />

Ver aquí para más información:
https://github.com/tannerlinsley/react-table/tree/v6#selecttable

Aquí hay un ejemplo de trabajo:
https://codesandbox.io/s/react-table-select-j9jvw

over 4 years ago · Santiago Trujillo Report

0

No estoy familiarizado con la tabla de reacciones, por lo que no sé si tiene soporte directo para seleccionar y anular la selección (sería bueno si lo tuviera).

Si no es así, con el código que ya tiene puede instalar el controlador onCLick. Ahora, en lugar de intentar adjuntar el estilo directamente a la fila, puede modificar el estado, por ejemplo, agregando seleccionado: verdadero a los datos de la fila. Eso activaría el renderizado. Ahora solo tiene que anular cómo se representan las filas con === verdadero seleccionado. Algo a lo largo de las líneas de:

 // Any Tr element will be green if its (row.age > 20) <ReactTable getTrProps={(state, rowInfo, column) => { return { style: { background: rowInfo.row.selected ? 'green' : 'red' } } }} />
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!