Я бы посоветовал проверить документы с официального сайта actjs.org .
Что касается вашего кода, я думаю, что основная ошибка, которую вы делаете, заключается в том, что вы изменяете свои реквизиты в TableRow компонент updateInput метод:
this.props.data.name = e.target.value;
Это не тот способ, которым вы должны обрабатывать изменение данных в React.Я бы предложил что-то вроде этого:
import React, { Component } from "react";
class App extends Component {
state = {
data: [
{
id: 1,
name: "Foo",
age: "20"
},
{
id: 2,
name: "Bar",
age: "30"
},
{
id: 3,
name: "Baz",
age: "40"
}
]
};
handleNameUpdate = (id, name) => {
const { data } = this.state;
const newData = data.map(row => {
if (row.id === id) {
return {
...row,
name
};
}
return row;
});
this.setState({ data: newData });
}
render() {
return (
<div className="App">
<div className="table-responsive">
<table className="table table-hover">
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Age</th>
<th>Updated Name</th>
</tr>
</thead>
<tbody>
{this.state.data.map(row => (
<TableRow
key={row.id}
data={row}
onNameUpdate={this.handleNameUpdate}
/>
))}
</tbody>
</table>
</div>
</div>
);
}
}
class TableRow extends Component {
handleChange = e => {
this.props.onNameUpdate(this.props.data.id, e.target.value);
};
render() {
const {
data: { id, name, age }
} = this.props;
return (
<tr>
<td>{id}</td>
<td>{name}</td>
<td>{age}</td>
<td>
<input type="text" value={name} onChange={this.handleChange} />
</td>
</tr>
);
}
}
export default App;
Надеюсь, это немного поможет!Желаю тебе удачи!