Я делаю приложение расписания.Index.js отображает таблицу.Строки таблицы читаются из массива children.Массив children читает состояние, чтобы поддерживать себя в актуальном состоянии.AddRow () работает нормально.DeleteRow () имеет некоторые проблемы.Я намереваюсь извлечь идентификатор parentNode из события, найти массив состояния, соединить его и позволить детям обновить себя - что, в свою очередь, обновляет рендер.Поэтому, когда строка удаляется, она выделяется из массива состояния, и она, в свою очередь, обновляется в массиве дочерних элементов, а она, в свою очередь, отображается.DeleteRow запускает все, кроме array.splice или indexOf part.Я даже пробовал цикл for, но он не работает.Мой подход правильный?
index.js
import React from "react";
import ReactDOM from "react-dom";
import HeaderAndFirstTableRow from "./headerandfirstrow";
import TableRow from "./tablerow";
import "./styles.css";
class App extends React.Component {
constructor(props) {
super(props);
this.state = { noOfRows: [] };
this.addRow = this.addRow.bind(this);
this.deleteRow = this.deleteRow.bind(this);
this.find = this.find.bind(this);
}
addRow() {
let arr = this.state.noOfRows;
let arrLength = arr.length;
arr.push(arrLength + 1);
this.setState({
noOfRows: arr
});
}
find(arr, id) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] === id) {
return i;
}
}
}
deleteRow(event) {
let arr = this.state.noOfRows;
let id = event.target.parentNode.id;
let ix = arr.findIndex(id);
arr.splice(ix, 1);
this.setState({ noOfRows: arr });
}
render() {
let children = [];
for (let i = 0; i < this.state.noOfRows.length; i++) {
children.push(
<TableRow id={this.state.noOfRows.length} delete={this.deleteRow} />
);
}
return (
<HeaderAndFirstTableRow click={this.addRow}>
{children}
</HeaderAndFirstTableRow>
);
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
headerandfirstrow.js
import React from "react";
import "./styles.css";
export default function HeaderAndFirstTableRow(props) {
function handler() {
props.click();
}
return (
<table>
<tr>
<th>Feature</th>
<th>Phase</th>
<th>Comments</th>
<th>Monday</th>
<th>Tuesday</th>
<th>Wednesday</th>
<th>Thursday</th>
<th>Friday</th>
<th>Saturday</th>
<th>Sunday</th>
<th onClick={handler}>+</th>
</tr>
{props.children}
</table>
);
}
tablerow.js
import React from "react";
import "./styles.css";
export default function TableRow(props) {
function del(e) {
props.delete(e);
}
return (
<tr id={props.id}>
<td />
<td />
<td />
<td />
<td />
<td />
<td />
<td />
<td />
<td />
<td onClick={del}>-</td>
</tr>
);
}