【发布时间】:2026-01-18 14:45:01
【问题描述】:
我正在尝试使用由一个表和多个行组成的复合组件从 API 端点动态加载数据。
Ranking 组件表示表格并放置表格的格式。它的状态包含一个 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>
);
}
};
【问题讨论】:
标签: reactjs components react-props