初识ReactJS的组件化开发(五):ajax加载评论列表,并定时获取更新
2016-07-30 21:07
836 查看
js代码如下:
html代码如下:
php代码如下:
效果演示:
// 创建组件 var NavBar = React.createClass({ loadMovie: function () { ReactDOM.render( <MovieList src="http://localhost/myphp/movies.php" />, document.getElementById("container") ) }, loadReview: function () { ReactDOM.render( <ReviewList src="http://localhost/myphp/reviews.php" />, document.getElementById("container") ) }, render: function(){ return <ul> <li><a href="#" onClick={this.loadMovie}>最新电影</a></li> <li><a href="#" onClick={this.loadReview}>最新评论</a></li> <li><SearchText cssClass={this.props.searchTextCss} placeholder={this.props.searchTextPlaceHolder} /></li> </ul> } }); // 搜索框组件 var SearchText = React.createClass({ render: function(){ return <input type="text" placeholder={this.props.placeholder} className={this.props.cssClass}/> } }); // 电影列表组件 var MovieList = React.createClass({ getInitialState: function () { return { movie:[] //保存电影json对象数组 }; }, componentDidMount: function () { $.get(this.props.src,null,function (ret) { this.setState({movie:ret}); }.bind(this)) }, render: function(){ if(this.state.movie.length == 0){ //代表还没有完成 数据交互,显示一个蒙版 return <PageMask /> }else{ var lis = this.state.movie.map(function (m) { return <li><p className="title">{m.movieName}</p><p className="intro">{m.movieIntro}</p></li> }) return <ul id="movielist">{lis}</ul> } } }); // 电影评论组件 var ReviewList = React.createClass({ getInitialState: function () { return { review:[] //保存电影json对象数组 }; }, componentDidMount: function () { setInterval(function () { $.get(this.props.src,null,function (ret) { this.setState({review:ret}); }.bind(this)) }.bind(this),3000); }, render: function(){ if(this.state.review.length == 0){ //代表还没有完成 数据交互,显示一个蒙版 return <PageMask /> }else{ var lis = this.state.review.map(function (r) { return <li><span className="author">{r.user}</span><span>{r.content}</span></li> }) return <ul id="reviewList">{lis}</ul> } } }); // 遮罩组件 var PageMask = React.createClass({ render: function () { return <div className="mask"><p>正在加载...</p></div> } }); ReactDOM.render( // 使用组件 <NavBar searchTextCss="search_text2" searchTextPlaceHolder="请输入关键字" />, document.getElementById("navbar") );
html代码如下:
<!DOCTYPE html> <html> <head> <title>初始</title> <meta charset="utf-8"> <script src="build/react.js"></script> <script src="build/react-dom.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script> <script src="node_modules/zepto/dist/zepto.min.js"></script> <style type="text/css"> *{padding: 0;margin: 0} #navbar{position: fixed;top: 0;left: 0;width: 100%;height: 60px;background-color: #222;} #navbar li{float: left;line-height: 60px;margin-left: 10px;display: inline-block;} #navbar li a{color: #fff;text-decoration: none;} /*searchtext的样式*/ .search_text{height: 25px;border-radius: 5px;} .search_text2{height: 25px;border-radius: 5px;background-color: beige} #container{margin: 70px auto;} #container p{text-align: center;} #movielist .title{font-weight: bold;font-size: 18px;} #movielist .intro{text-indent: 2em;color: gray;border-bottom: 1px dashed #dddddd;text-align: left;padding: 10px;} .mask{position: fixed;top: 0;left: 0;width: 100%;height: 100%;background-color: gray;opacity: 0.5;z-index: 999;} .mask p{width: 20%;height: 30px;line-height: 3px;margin: 0 auto;margin-top: 30%;opacity: 1.0;} #reviewList{width: 80%;margin: 10px auto;} #reviewList li{line-height: 24pt;float: left;width: 100%;display: block;border: 1px solid #dddddd;margin-top: 16px;text-indent: 2em;} #reviewList li .author{color: gray;margin-left: 5px;} </style> </head> <body> <div id="navbar"></div> <div id="container"> </div> <div id="footer"></div> <script type="text/babel" src="src/nav.js"></script> </body> </html>
php代码如下:
<?php header("Access-Control-Allow-Origin:*"); header("Content-type: application/json"); $r1['content'] = "这个电影很好看啊"; $r1['user'] = "张三"; $r2['content'] = "这个电影很好看啊这个电影很好看啊这个电影很好看啊"; $r2['user'] = "李思"; $r3['content'] = "这王武的评论"; $r3['user'] = "王武"; // 加入大数组 $data[] = $r3; $data[] = $r1; $data[] = $r2; die(json_encode($data,JSON_UNESCAPED_UNICODE));
效果演示:
相关文章推荐
- 初识ReactJS的组件化开发(六):ajax更新评论列表时的定时器bug修改
- 初识ReactJS的组件化开发(八):用表单做评论 :限制textarea可输入字符长度
- 初识ReactJS的组件化开发(四):ajax加载电影列表时显示"正在加载"
- 初识reactJS的组件化开发(一):简单封装
- 初识ReactJS的组件化开发(二):组件嵌套和属性的基本使用
- Flask MVVM 开发(vue.js) - ajax如何同步更新地址栏history 以及使用浏览器返回按钮
- js+ asp.Net ajax开发163邮箱效果(列表底色、多选拖动等)--checkBox多选
- IE9.0或者360下js(JavaScript、jQuery)不能正确执行(加载),按F12后执行正常;Firefox下ajax的success返回数据data(json、string)无法获取
- Android应用开发-小巫CSDN博客client之获取评论列表
- Ajax根据异步刷新div内列表内容,带前台JS获取列表li数量分页
- Android应用开发-小巫CSDN博客客户端之获取评论列表
- [转]IE9.0或者360下js(JavaScript、jQuery)不能正确执行(加载),按F12后执行正常;Firefox下ajax的success返回数据data(json、string)无法获取
- IE9.0或者360下js(JavaScript、jQuery)不能正确执行(加载),按F12后执行正常;Firefox下ajax的success返回数据data(json、string)无法获取
- js+ asp.Net ajax开发163邮箱效果(列表底色、多选拖动等)--checkBox多选
- 利用js将ajax获取到的后台数据动态加载至网页中
- js页面用定时任务通过AJAX获取后台数据,但是从这个页面跳转到其他页面后,定时任务仍然在定时请求后台
- Scrapy框架结合Spynner采集需进行js,ajax动态加载的网页并提取网页信息(以采集微信公众号文章列表为例)
- Ajax实现定时从服务器获取数据,定时更新数据
- 初识ReactJS的组件化开发(三):利用ajax渲染电影列表
- js+ asp.Net ajax开发163邮箱效果(列表底色、多选拖动等)--列表底色随鼠标移动变化