Я пытаюсь использовать составной компонент, состоящий из одной таблицы и нескольких строк, для динамической загрузки данных из конечной точки API.
Компонент «Ранжирование» представляет таблицу и определяет формат таблицы. Его состояние содержит массив JSON пользователей, который получает нагрузку после вызова componentDidMount. Когда состояние изменяется, таблица перерисовывается: метод renderRows выполняет итерации по JSON объектам массива состояний, а метод renderRow создает новые строки (по одному для каждого элемента в массиве состояний).
Кажется, все работает, но почему-то компоненты Row не загружаются ...
function Row(props) {
console.log("Rendering row"); --> NEVER PRINTS
return (
<TableRow>
<TableCell> {props.name}</TableCell>
<TableCell> {props.amount}</TableCell>
<TableCell> {props.country}</TableCell>
<TableCell> {props.memo} </TableCell>
</TableRow>
);
}
class Ranking extends React.Component {
constructor(props) {
super(props);
this.state = {
users: [] --> gets populated on ComponentDidMount
};
}
renderRow(user) {
console.log('calling renderRow on ' + user.username); -> always prints
return (
<Row name={user.username}
amount={user.amount}
country={user.country}
memo={user.memo}
/>
);
}
renderRows(userList) {
for (var i=0; i<userList.length; i++){
this.renderRow(userList[i]);
}
}
componentDidMount() {
fetch("/users").then(response => response.json())
.then(data => this.setState({users: data}))
}
render() {
console.log(this.state.users) --> prints expected json array
return (
<TableContainer component={Paper}>
<Table aria-label="simple table">
<TableHead>
<TableRow>
<TableCell align="right">User</TableCell>
<TableCell align="right">Amount</TableCell>
<TableCell align="right">Country</TableCell>
<TableCell align="right">Memo</TableCell>
</TableRow>
</TableHead>
<TableBody>
{this.renderRows(this.state.users)} --> is correctly called
</TableBody>
</Table>
</TableContainer>
);
}
};