React使用笔记4--创建头部组件
更新日期:
最近在学习使用React作为前端的框架,《React使用笔记》系列用于记录过程中的一些使用和解决方法。
本文记录创建头部组件的过程。
react-bootstrap
想要在react中使用bootstrap吗?
如果只是需要使用样式相关的,可以在tempaltes的index.ejs中引用css文件就可以。1
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/latest/css/bootstrap.min.css">
如果你还想要使用bootstrap的组件,那么就可以使用react-bootstrap库啦。
安装react-bootstrap
- 使用npm安装
1 | $ npm install react-bootstrap --save |
- 引用css文件
1 | <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/latest/css/bootstrap.min.css"> |
导入相关组件
react-bootstrap的组件都需要一一导入。1
2
3import Button from 'react-bootstrap/lib/Button';
//或者
import { Button } from 'react-bootstrap';
使用
使用方法如下,其中组件会有大写的标签,以及一定的属性。1
2
3<Button bsStyle="success" bsSize="small" onClick={someCallback}>
Something
</Button>
具体每个组件的使用方法可到组件库中查看。
创建头部菜单
该头部菜单与前一个AngularJS使用笔记中完全一致。如图:
添加头部组件
- 在components文件夹中添加header.jsx文件
- 定义并输出Header组件
1 | import React from 'react'; //导入react组件 |
- 在components中的index.jsx中使用该组件
1 | import Header from './header.jsx'; //Header自定义组件 |
此时我们可以在/index路由页面看到头部了。
接下来会运用到react有关的Props/State和生命周期,大家如果不是很清楚可以翻上一篇《React使用笔记3–组件的State/Props与生命周期》进行预热。
添加属性Props
由于菜单的内容不变,我们可以将其写成Props属性。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22propTypes: { //属性校验器
menus: React.PropTypes.array, //表示menus属性必须是array,否则报错
usermenus: React.PropTypes.array, //表示usermenus属性必须是array,否则报错
},
getDefaultProps: function() {
return { //设置默认属性
menus: [{
title: 'index', //title用于储存路由对应的路径
href: '/index', //href用于设定该菜单跳转路由
text: '首页', //text用于储存该菜单显示名称
}, {
title: 'others',
href: '/other',
text: '其他',
}],
//usermenus用于储存侧边下拉菜单
usermenus: [{
click: function(){}, //click用于设置该菜单点击事件
text: '退出', //text用于储存该菜单显示名称
}],
};
},
添加state状态
像时间这种每500毫秒刷新一次的,我们将其放在state中。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15getInitialState: function() {
return {clock: ''}; //设置初始state值
},
//定义clockRender事件,用于改变this.state.clock值
clockRender: function(){
let numberStandard = function(num) {
let _val = Number(num), _num;
_num = (_val < 10) ? ('0' + _val) : ('' + _val);
return _num;
}, _date = new Date(),
clock = _date.getFullYear() + '年' + (_date.getMonth() + 1) + '月' +
_date.getDate() + '日' + ' ' + numberStandard(_date.getHours()) + ':' + numberStandard(_date.getMinutes()) +
':' + numberStandard(_date.getSeconds());
this.setState({clock: clock});
},
注意:state不应存储计算后的值,计算应该在render中进行,但由于比较长,本骚年也就这样将就用了。小伙伴们有更好的方法也可以提出来哦。
setInterval时钟
在componentDidMount中进行setInterval时钟。componentDidMount属于react生命周期,在初始化渲染执行之后立刻调用一次,仅客户端有效。
render就是一个模板的作用,他只处理和展示相关的逻辑,如果有业务逻辑,应放在componentWillMount和componentDidMount中执行。1
2
3
4
5
6
7
8
9
10
11//进行setInterval时钟
componentDidMount: function(){
let that = this;
this.interval = setInterval(function() {
that.clockRender();
}, 500);
},
//组件注销时需销毁定时器
componentWillUnmount: function(){
clearInterval(this.interval);
},
设置render模板
在这里大家可以看到react-bootstrap的使用方法啦。当然每个组件都是已经在该文件中引入了的。
还有jsx的遍历方法也会在这里展示。
- 在index.jsx页面引入Header时添加属性active=”index”,作为菜单选中样式的判断
1 | render() { |
结束语
不得不说框架之间的切换还是有很多问题呢,这时候需要的就是坚持不懈地学习和排除bug啦。
当然本骚年本来还想用ES6装装逼的,奈何不熟练的使用后果就是很多报错,看来也还是要加强ES6语法呀。
此处查看项目代码(仅包含app部分)
此处查看页面效果
码生艰难,写文不易,给我家猪囤点猫粮了喵~
查看Github有更多内容噢:https://github.com/godbasin
更欢迎来被删的前端游乐场边撸猫边学前端噢
如果你想要关注日常生活中的我,欢迎关注“牧羊的猪”公众号噢