selections not working if columns pulled from state?
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 30/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Estagnada
- Stack de tecnologia
- javascript, react
- Domínio
- frontend
Direção de pesquisa
Reproduza o exemplo fornecido de MultiSelectTable, comparando as columns criadas em useEffect com o array de columns inline passado para BaseTable. Rastreie como as columns baseadas em estado e cellRenderer observam selectedRows e, em seguida, verifique se selecionar uma caixa de seleção atualiza tanto selectedRows quanto o estado renderizado da caixa de seleção.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
In my application, I need to dynamically create the columns and then have the pull the columns from the state. However, when I do this, the code to update the row state does not work. Below is a simplified version, showing the issue. If you run this code, when you select the checkbox, the state does not get updated correctly.
If, however, I change BaseTable and set the columns= the actual array, then the selection process works.
Code that does not work
/* eslint-disable */
import React, { useState,useEffect } from 'react';
import BaseTable, { Column } from 'react-base-table';
import 'react-base-table/styles.css';
const MultiSelectTable = () => {
const [selectedRows, setSelectedRows] = useState([]);
const [columns, setColumns] = useState([])
useEffect(()=>{
setColumns(
[
{
key:"checkbox",
title:"",
width:50,
selectedRowKeys:{selectedRows},
cellRenderer:({ rowData }) => (
<input
type="checkbox"
checked={selectedRows.includes(rowData.id)}
onChange={() => handleRowSelection({ rowData })}
/>
)}
,
{key:"name", dataKey:"name", title:"Name", width:200},
{key:"age", dataKey:"age", title:"Age", width:100}
]
)
},[])
const handleRowSelection = ({ rowData }) => {
const selectedRowKeys = [...selectedRows];
const rowIndex = selectedRowKeys.indexOf(rowData.id);
if (rowIndex !== -1) {
selectedRowKeys.splice(rowIndex, 1);
} else {
selectedRowKeys.push(rowData.id);
}
setSelectedRows(selectedRowKeys);
console.log(selectedRowKeys)
};
const data = [
{ id: 1, name: 'John Doe', age: 25 },
{ id: 2, name: 'Jane Smith', age: 30 },
{ id: 3, name: 'Bob Johnson', age: 35 },
// Add more data as needed
];
return (
<BaseTable
width={600}
height={400}
data={data}
columns={columns}
rowKey="id"
/>
);
};
export default MultiSelectTable;
Code that works:
/* eslint-disable */
import React, { useState,useEffect } from 'react';
import BaseTable, { Column } from 'react-base-table';
import 'react-base-table/styles.css';
const MultiSelectTable = () => {
const [selectedRows, setSelectedRows] = useState([]);
const handleRowSelection = ({ rowData }) => {
const selectedRowKeys = [...selectedRows];
const rowIndex = selectedRowKeys.indexOf(rowData.id);
if (rowIndex !== -1) {
selectedRowKeys.splice(rowIndex, 1);
} else {
selectedRowKeys.push(rowData.id);
}
setSelectedRows(selectedRowKeys);
console.log(selectedRowKeys)
};
const columns= [
{
key:"checkbox",
title:"",
width:50,
selectedRowKeys:{selectedRows},
cellRenderer:({ rowData }) => (
<input
type="checkbox"
checked={selectedRows.includes(rowData.id)}
onChange={() => handleRowSelection({ rowData })}
/>
)}
,
{key:"name", dataKey:"name", title:"Name", width:200},
{key:"age", dataKey:"age", title:"Age", width:100}
]
const data = [
{ id: 1, name: 'John Doe', age: 25 },
{ id: 2, name: 'Jane Smith', age: 30 },
{ id: 3, name: 'Bob Johnson', age: 35 },
// Add more data as needed
];
return (
<BaseTable
width={600}
height={400}
data={data}
columns={columns}
rowKey="id"
/>
);
};
export default MultiSelectTable;
How can I load the columsn dynamically into state but still have the selection of rows work?
- Linguagem predominante
- TypeScript
- Estrelas
- 1.5k
- Forks
- 170
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de Autodesk/react-base-table
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 25/100
Autodesk/react-base-table#434 ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 20/100
Autodesk/react-base-table#433 ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 48/100
Autodesk/react-base-table#432 · 1 comentário ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
Autodesk/react-base-table#431 · 2 comentários ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 25/100
Autodesk/react-base-table#426 ·
Todas as issues de Autodesk/react-base-table
Issues semelhantes
-
triage
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 90/100
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
mermaid-js/mermaid-live-editor#2053 ·
Mantenedores costumam responder em até 1 dia
-
factory
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
jessepollak/home#1455 ·
Mantenedores costumam responder em até 1 dia
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 95/100
lingdojo/kana-dojo#31227 · 1 comentário · 5 reações ·
Mantenedores costumam responder em até 1 dia
-
mobile: device viewer shows dark status bar icons on its dark backdrop in light mode (Android)Aberta
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 92/100
appandflow/stim#1838 ·
Mantenedores costumam responder em até 1 dia