React中如何插入faker代码生成10条车辆数据并列表展示
React类组件初始化Faker车辆数据的正确插入位置
你现有代码逻辑已经完整,只要把10条车辆数据的生成逻辑放在以下两个位置之一,就能正常渲染,不会出问题:
方案1:直接在constructor初始化state时生成(推荐,逻辑最集中)
首先在文件顶部引入faker依赖:import { faker } from '@faker-js/faker';
把constructor里原来初始化vehicles: []的部分替换成循环生成的逻辑即可,你之前写的事件绑定代码完全不用动:
constructor(props) { super(props); // 生成10条初始车辆数据 const initVehicles = []; for (let i = 0; i < 10; i++) { initVehicles.push({ id: faker.string.uuid(), // 建议补充唯一id,方便后续选中、删除操作定位 manufacturer: faker.vehicle.manufacturer(), model: faker.vehicle.model(), type: faker.vehicle.type(), fuel: faker.vehicle.fuel(), vin: faker.vehicle.vin(), color: faker.vehicle.color() }) } this.state = { vehicles: initVehicles, // 替换原来的空数组 // 你定义的其他state(比如当前选中车辆id)保留在这 } // 你原来写的事件绑定逻辑原样保留 this.handleAdd = this.handleAdd.bind(this); this.handleSelect = this.handleSelect.bind(this); this.handleDelete = this.handleDelete.bind(this); }
方案2:在componentDidMount生命周期中生成
如果不想让constructor里塞太多业务逻辑,可以把数据生成逻辑放到组件挂载完成的生命周期钩子里,组件首次渲染后自动更新state加载数据:
componentDidMount() { const initVehicles = []; for (let i = 0; i < 10; i++) { initVehicles.push({ id: faker.string.uuid(), manufacturer: faker.vehicle.manufacturer(), model: faker.vehicle.model(), type: faker.vehicle.type(), fuel: faker.vehicle.fuel(), vin: faker.vehicle.vin(), color: faker.vehicle.color() }) } this.setState({ vehicles: initVehicles }) }
这种方式下constructor里的vehicles初始值还是保留空数组就行,生命周期触发后会自动填充数据触发重渲染,你写的Stack列布局、VehicleList传参逻辑完全不需要调整。
避坑提醒
绝对不要把数据生成逻辑写在render()方法里:render会在每次state更新时重新执行,会导致你每次做选中、删除操作时,车辆数据都会被重新生成覆盖,交互完全失效,还会造成不必要的性能损耗。
建议每条数据补充唯一id字段:不要用vin或者model当唯一标识,faker生成的数据存在重复概率,用uuid当唯一主键能避免选中、删除时定位错条目。
内容的提问来源于stack exchange,提问作者Aquiles Bailo
相关产品推荐
相关产品推荐

