#reactjs #redux #react-redux
#reactjs #redux #реагировать-redux
Вопрос:
Я ищу способ, чтобы при невыбранной строке удалить число в массиве.
при выборе> идентификатор: [2, 7, 8]
==> Проблема, когда я отменил выбор одного элемента: пример с идентификатором 8 :
при невыбранном> идентификатор: [2, 7, 8]
идентификатор 8 остается в моем массиве.
==> Проблема, когда я отменяю выбор одного элемента и нажимаю снова :
идентификатор : [2, 7, 8, 8]
constructor(props) {
super(props);
this.state = {
id: [],
};
this.onRowSelect = this.onRowSelect.bind(this);
this.onSelectAll = this.onSelectAll.bind(this);
}
onRowSelect(row, isSelected, e) {
let rowStr = '';
for (const prop in row) {
rowStr = prop ': "' row[prop] '"';
if (isSelected == true){
this.setState({ id: [...this.state.id, row.id] })
}
}
console.log(`is selected: ${isSelected}, ${rowStr}`);
}
Ответ №1:
Вы должны использовать функцию map (https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/map ):
onSelectAll(isSelected, rows) {
console.log(`is select all: ${isSelected}`);
if (isSelected) {
console.log('Current display and selected data: ');
this.setState({ id: [...this.state.id, ...rows.map(x=>x.id)] })
} else {
console.log('unselect rows: ');
const ids = this.state.id.reduce((acc,id)=>{
return rows.find(x=>x.id === id) ? acc : [...acc,id]
},[])
this.setState({ id: [...ids] })
}
}
Комментарии:
1. Спасибо, я постараюсь сделать, как и раньше, удалить данные из идентификатора при отмене выбора.
2. Я редактирую с помощью кода сокращения, чтобы отменить выбор идентификатора всех строк 😉
Ответ №2:
Когда значение isSelect равно false, вы должны установить в своем состоянии свой массив без выбранного идентификатора строки. функция фильтра сделает это за вас.
onRowSelect(row, isSelected, e) {
let rowStr = '';
for (const prop in row) {
rowStr = prop ': "' row[prop] '"';
if (isSelected == true){
this.setState({ id: [...this.state.id, row.id] })
}else{
this.setState({ id: [...this.state.id.filter(x=>x!==row.id)] })
}
}
console.log(`is selected: ${isSelected}, ${rowStr}`);
}
Комментарии:
1. Я опубликовал очень похожую проблему, не могли бы вы мне помочь?
Ответ №3:
Когда я использую
this.setState({ id: […this.state.id , строки[i].идентификатор] })
он извлекает только последний идентификатор раздела
onSelectAll(isSelected, rows) {
console.log(`is select all: ${isSelected}`);
if (isSelected) {
console.log('Current display and selected data: ');
} else {
console.log('unselect rows: ');
}
for (let i = 0; i < rows.length; i ) {
console.log(rows[i].id);
this.setState({ id: [...this.state.id, rows[i].id] })
}
}