美化英雄列表 - 图1

在 umi 中使用 less

要在 umi 中使用 less 不需要任何配置,直接使用就可以了。。

分析页面这是一个栅格布局,我们使用 antd 的 Row 和 Col 实现。这小节的最终效果,如上图所示,你可以自己先尝试着实现,如果你可以完成,那你就不需要再阅读本节内容。


实现步骤

step1 先从 hero 里面取出 heros 数据

  1. const { heros = [] } = hero;

这里使用了 es6 的语法,注意这里给 heros 定了一个默认值,这样我们在 dom 里面就不要判断了。(类似 heros&&heros 这样的语句)

step2 循环取出 heros ,绑定页面

  1. <Row>
  2. {heros.map(item => (
  3. <Col key={item.ename} span={3} >
  4. <img src=""/>
  5. <p>{item.cname}</p>
  6. </Col>
  7. ))}
  8. </Row>

注意:这里的src为https://game.gtimg.cn/images/yxzj/img201606/heroimg/513/513.jpg,其中513为英雄的ename,这是我分析出来的。放上去,可用。后续如果官网有修改,这个图片地址不对的话,要替换为新地址。

step3 为页面添加样式

  1. <Col key={item.ename} span={3} className={styles.heroitem}>

index.less

  1. .normal {
  2. /* background: #F2B279; */
  3. }
  4. .heroitem{
  5. text-align: center;
  6. color: #363636;
  7. img{
  8. width: 83px;
  9. height: 83px;
  10. border: 2px solid #258DF2;
  11. border-radius:0 10px 0 10px ;
  12. }
  13. }

step4 保存,运行程序

美化英雄列表 - 图2

我们发现,页面是我们想要的样式,但是数据反了,所以我们先将数组逆序处理。

  1. <Row>
  2. {heros.reverse().map(item => (
  3. <Col key={item.ename} span={3} className={styles.heroitem}>
  4. <img
  5. src={`https://game.gtimg.cn/images/yxzj/img201606/heroimg/
  6. ${item.ename}/${item.ename}.jpg`}
  7. />
  8. <p>{item.cname}</p>
  9. </Col>
  10. ))}
  11. </Row>

最终效果为

美化英雄列表 - 图3

类型定义错误
image.png
在使用时,我们会看到一个错误,这是因为我们没给 heros 的成员,定义类型。
我们在src/models/hero.ts 中声明了 heros

  1. export interface HeroModelState {
  2. name: string;
  3. heros: [];
  4. }

我们应该也声明他的成员类型

  1. interface HeroProps {
  2. ename: number;
  3. cname: string;
  4. title: string;
  5. new_type: number;
  6. hero_type: number;
  7. skin_name: string;
  8. }
  9. export interface HeroModelState {
  10. name: string;
  11. heros: HeroProps[];
  12. }

这样,使用的时候就不会报错了。


作业

参考上面的写法,实现局内道具页面 http://localhost:8000/item
提示

  1. <img src={`https://game.gtimg.cn/images/yxzj/img201606/itemimg/${data.item_id}.jpg`} />