reactjs - 重复相同的输入不显示
问题描述
我正在使用 Laravel 和 React 制作应用程序。我在 laravel 中创建了一个事件来实时显示数据,我正在使用“ React Transition Group ”为添加的数据添加动画。
问题是,当我在没有这个包的情况下正常添加数据时,数据显示正确,但是一旦添加,动画和数据工作正常,除非重复相同的数据。
例如,如果我添加{patient.nom}
和{patient.prenom}
值,例如John
& Doe
。它们会出现,但如果我再放一遍,它们就不会出现,但在数据库中它们已完美注册。
经过一些测试,我很确定它与key
in
<CSSTransition
key={patient.nom,patient.prenom}
timeout={500}
classNames="item"><CSSTransition>
整个组件:
import React,{Component} from 'react';
import axios from 'axios';
import { Link } from 'react-router-dom';
import Echo from "laravel-echo";
import {
ListGroup,
Button,
} from 'react-bootstrap';
import {
CSSTransition,
TransitionGroup,
} from 'react-transition-group';
import './styles.css';
class Patient extends React.Component {
constructor(props) {
super(props)
this.state = {
patients : [],
};
}
componentDidMount() {
axios.get('api/patients')
.then(response => {this.setState({patients: response.data})})
.catch(err => console.log(err));
window.Echo.channel('home')
.listen('NewPatient', newPatientData => {
this.setState({
patients: this.state.patients.concat(newPatientData)
})
}, e => {
console.log("Error", e)
})
}
render() {
return (
<div>
<TransitionGroup>
{this.state.patients.slice(0).reverse().map(patient =>
<CSSTransition
key={patient.nom,patient.prenom}
timeout={500}
classNames="item">
<ListGroup.Item>
{patient.nom} {patient.prenom}
</ListGroup.Item>
</CSSTransition>
)}
</TransitionGroup>
</div>
)
}
}
export default Patient;
解决方案
解决了。正如我在一篇文章中读到的:
为每个项目生成一个唯一的 id,并在呈现列表时将其用作键。
所以我的列表中没有唯一的 id,因为正在广播的事件没有发送 id。
因此,在我应该拥有的键的最终结果中 key={patient.id}
,就像列表中的每个元素都将具有来自数据库的唯一 ID。
推荐阅读
- reactjs - 使用 @urbica/react-map-gl 进行动态 Mapbox 图层更新
- amazon-web-services - 如何在 AWS 的 dynamodb 中对函数 lambda 中的值求和
- c# - WPF 自定义网格子项不会在设计视图上刷新
- pdf - PDF 中的仿射变换
- jquery - 多次触发按钮时的jQuery单击事件?
- ocaml - opam 安装 Curl 失败
- awk - 期望脚本 - awk 说变量不存在
- angular - 无法通过元素 ID 使用 ngAfterViewInit 打开材料数据选择器
- python - 如何使用 PyTorch 构建 LSTM 自动编码器?
- postgresql - 错误:某些行违反了检查约束