Вы можете абстрагировать строку таблицы в отдельный компонент.Затем вы можете настроить каждую дорожку на свое собственное состояние ползунка.Примером такого компонента может быть следующий:
import React, { Component } from "react";
import { Table, Checkbox } from "semantic-ui-react";
import format from "date-fns/format";
export default class TableRowWithSlider extends React.Component {
constructor(props) {
super(props);
this.state = {
exportSlider: false
};
}
slider = () => {
this.setState({ exportSlider: !this.state.exportSlider }, () => {
console.log("slider --> ", this.state.exportSlider);
const { id, slide } = this.props;
slide({ id, isExported: this.state.exportSlider });
});
};
render() {
const { id, startTime, selfUri, status } = this.props;
return (
<React.Fragment>
<Table.Row>
<Checkbox slider onChange={this.slider} />
<Table.Cell>{id}</Table.Cell>
<Table.Cell>{format(startTime, "MMM Do YYYY, h:mm:ss A")}</Table.Cell>
<Table.Cell>{selfUri}</Table.Cell>
<Table.Cell>{status}</Table.Cell>
</Table.Row>
</React.Fragment>
);
}
}
Проверьте песочницу для полного решения: щелкните .Родительский компонент хранит состояние всех идентификаторов расписания, которые должны быть экспортированы.Дочерний компонент AKA TableRowWithSlider
вызывает собственный обработчик слайдов, а также обработчик слайдов родителя для передачи своего идентификатора и состояния переключения.
Тело таблицы выглядит следующим образом:
<Table.Body>
{Object.values(schedules).map(
({ id, startTime, selfUri, status }) => {
return (
<TableRowWithSlider
id={id}
startTime={startTime}
selfUri={selfUri}
status={status}
slide={this.slider.bind(this)}
/>
);
}
)}
</Table.Body>
Иобработчик слайдов родителя выглядит следующим образом:
slider = ({ id, isExported }) => {
if (isExported === true) {
this.setState(
{
scheduleIdsToExport: [id, ...this.state.scheduleIdsToExport]
},
() => console.log(this.state.scheduleIdsToExport)
);
} else {
const newArray = this.state.scheduleIdsToExport.filter(
storedId => storedId !== id
);
this.setState(
{
scheduleIdsToExport: newArray
},
() => console.log(this.state.scheduleIdsToExport)
);
}
};
Проверить полное решение здесь