一个智能产业园的小程序由于可以控制很多种设备,可能有灯、空调、窗帘等智能设备。
现在面临以下问题:
为了解决上面的问题,我们可以将设备的图标保存在远端的服务器。从服务器请求图片到本地进行渲染。
但是这样可能会导致一个新的问题就是如果服务器挂了,小城序的图标就不能够使用了。对此我们的对策是当服务器获取不到图片的时候就使用本地的某张备用照片。
根据上述背景整理出下列案例
遍历一个设备数组,每个元素li
标签里的img
需要放一张与元素相关的图片,如果请求服务器没有该地址的图片,或者服务器挂了,则应该使用本地的图片。这应该如何实现呢
在React中,你可以使用数组的map
方法来遍历设备数组,并为每个设备渲染相应的元素。对于每个
元素中的图片,你可以使用之前提到的逻辑来加载服务器图片并备用本地图片。
以下是一个示例代码,展示了如何在React中实现遍历设备数组并加载相关图片的逻辑:
import React from 'react';
const DeviceList = ({ devices }) => {
return (
<ul>
{devices.map((device) => (
<li key={device.id}>
<img
src={device.serverImagePath}
alt="Device Image"
onError={(e) => {
e.target.src = require('./defaultImg.png');
}}
/>
<span>{device.name}</span>
</li>
))}
</ul>
);
}
export default DeviceList;
在上面的代码中,DeviceList
组件接受devices
作为属性,它是设备数组。map
方法用于遍历设备数组,并为每个设备渲染一个元素。其中,
src
属性被设置为设备的服务器图片路径。如果加载失败,则会触发onError
事件处理程序,利用require
导入设置为图片的src
属性,从而显示备用的本地图片。这里使用了内联的箭头函数来为每个元素定义事件处理程序。
你可以在父组件中使用DeviceList
并传递设备数组:
import React from 'react';
import DeviceList from './DeviceList';
function App() {
const devices = [
{ id: 1, name: 'Device 1', serverImagePath: '服务器图片路径1'},
{ id: 2, name: 'Device 2', serverImagePath: '服务器图片路径2'},
// 其他设备
];
return (
<div>
<DeviceList devices={devices} />
</div>
);
}
export default App;
确保将每个设备对象中的"服务器图片路径"
替换为实际的服务器图片路径,将"本地图片路径"
替换为实际的本地图片路径。
这样,对于每个设备,会根据服务器图片路径加载图片,如果加载失败,则会显示备用的本地图片。