ReactJS 在 Browser 环境下是如何开发的

以前使用reactjs做前端开发都是webpack打包然后在运行,这样的好处是,你开发的环境是一个纯碎在写nodejs的感觉,而且还能应用很多ES6的新特性,岂不快哉!

最近在做后端,也由于使用webpack时间长,一直没有找到很好的办法去解决,自动打包缓慢的问题,还有就是每次开发你都要去根据具体情况写要给跟webpack相关的config文件。

于是就试着用Browser的环境进行开发,结果今天尝试下后,果然还是很不错的。

首先引入react,我这里使用reflux,然后再引入reflux,再引入babel。

1
2
3
4
<script src="/js/react.min.js" type="text/javascript" charset="utf-8"></script>
<script src="/js/react-dom.min.js" type="text/javascript" charset="utf-8"></script>
<script src="/js/reflux.min.js" type="text/javascript" charset="utf-8"></script>
<script src="https://cdn.bootcss.com/babel-standalone/6.10.3/babel.min.js"></script>

类似下面这样,跟使用jquery是一样的感觉。

接下来我们写一个简单的分页的组件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
var Pagination = React.createClass({
clickHandler: function (e) {
e.preventDefault();
if (e.currentTarget.dataset.handle == 'false') {
this.props.listData(e.currentTarget.dataset.page);
}
},
render: function () {
let nextStop = false;
let preStop = false;
if (this.props.currentdata.length < this.props.pagesize) {
nextStop = true;
}

if ((this.props.page - 1) <= 0) {
preStop = true;
}

const preClass = preStop ? 'previous disabled' : 'previous';
const nextClass = nextStop ? 'next disabled' : 'next';

let pre_page = parseInt(this.props.page) - 1;
let next_page = parseInt(this.props.page) + 1;

return (
<nav>
<ul className="pager">
<li className={preClass}>
<a href="#" onClick={this.clickHandler} data-page={pre_page} data-handle={preStop}>
上一页
</a>
</li>
<li className={nextClass}>
<a href="#" onClick={this.clickHandler} data-page={next_page} data-handle={nextStop}>
下一页
</a>
</li>
</ul>
</nav>
);
}
});

Pagination.propTypes = {
currentdata: React.PropTypes.array.isRequired,
page: React.PropTypes.number.isRequired,
pagesize: React.PropTypes.number.isRequired,
listData: React.PropTypes.func.isRequired
};

就是这样,不需要其他的 export的东西,以为我们只要在页面中引入就可以了。

1
<script src='/js/components/partial/Pagination.js' type="text/babel"></script>

就像上面这样就可以了。

下面我们调用一下:

1
2
3
4
5
6
var pagerProps = {
page: this.state.page,
pagesize: this.state.pageSize,
currentdata: this.state.recordItem,
listData: this.loadMorePage
};

这里的loadMorePage是另外组件里面的一个方法,用来加载下一页数据的,page就是页数,pageSize就是每页的数量。

1
2
3
4
5
loadMorePage:function(page){
page = parseInt(page);
this.setState({page: page});
Action.getRecordItem(this.props.uid, page, this.state.pageSize);
},

就像上面这样子,加载一下数据就可以渲染到列表的组件里面去了。然后就是如何再其他组件里面调用了。

1
2
3
<div className="col-md-12">
<Pagination {...pagerProps}/>
</div>

pagerProp就是刚才上面的变量。这样就可以使用了。

总体感觉下来起始跟我之前的使用方法区别就是,不再需要去import和export了。

而且不需要去不断的打包了。不知道后面开发还会遇到啥其他问题,继续更新…