2 回答
TA贡献1891条经验 获得超3个赞
您没有从组件中渲染任何内容
在处理数组之后,理想情况下,您应该将其设置为会导致组件重新渲染的状态,并且如果您从如下状态渲染序列,它将在加载后显示。单击按钮后,数字列表函数将执行并使用数据设置状态,并将其映射和显示。
根据您当前的代码,您只需映射并返回未在任何地方使用的项目,因此您应该遵循以下模式。
class Serials extends Component {
state = {
serials: [],
};
numberList() {
const uid = this.state.user.uid;
const serialRef = db.ref(uid + '/serials');
serialRef.on('value', (serial_numbers) => {
const serials = [];
serial_numbers.forEach((serial_number) => {
serials.push({ s: serial_number.val() });
});
this.setState({ serials: serials });
});
}
render() {
return (
<div>
<button onClick={this.numberList}>Cards</button>
<div>
{this.state.serials.map((number) => (
<Card>
<Card.Body>{number.s.serial}</Card.Body>
</Card>
))}
</div>
</div>
);
}
}
TA贡献1776条经验 获得超12个赞
serials应该是组件状态的一部分,由单击处理程序更新,并映射到方法中render。
state = {
serials: [],
};
...
numberList() {
const { user: { uid } } = this.state;
const serialRef = db.ref(uid + "/serials");
serialRef.on("value", (serial_numbers)=> {
this.setState({
serials: serial_numbers.map(s => ({ s: s.val() })),
});
});
}
...
render () {
const { serials } = this.state;
return (
<div>
<button onClick={this.numberList}>Cards</button>
<div>
{serials.map((number) => (
<Card>
<Card.Body>{number.s.serial}</Card.Body>
</Card>
))}
</div>
</div>
)};
}
添加回答
举报