webpack学习(六)—webpack+react+es6(第3篇)
接上篇 : webpack学习(六)—webpack+react+es6(第2篇)
上篇其实是有问题的,问题在取服务器数据这块。this.props 表示那些一旦定义,就不再改变的特性,而 this.state 是会随着用户互动而产生变化的特性【1】。服务器数据是变化的,应该作为state而不是props。
参考了其他的博客后,改写一遍。例子:
src/js/app.js
import React from 'react';
import ReactDOM from 'react-dom';
import ImgDemo from './imgDemo'; ReactDOM.render(
<ImgDemo/>,
document.getElementById('imgDemo')
)
src/js/imgDemo.js【2】
import React from 'react';
import OneImg from './oneImg'
class ImgDemo extends React.Component{
constructor(props) {
super(props);
//我们使用state里面的datalist,来保存所有服务端传来的数据
//刚开始的时候,内容为空
this.state = {
datalist:[]
}
} render() {
//当react库运行到render方法的时候,就会遍历所有state中datalist的项目,第一遍为空
return <div>
{
this.state.datalist.map((arr,index)=>
<OneImg oneData={arr} key={index}/>
)
}
</div>;
} //可以看到,我们的类被构造的时候本身自带的state中services是个空数组,我们需要用内容填充他
//查看react的文档的《组件生命周期》这一页(这一页很重要,一定要明白各个函数在什么情况下会被触发),发现它建议我们在每个组件显示完毕,之后使用componentDidMount函数来获取需要的数据,那就照做
componentDidMount() {
let xhr = new XMLHttpRequest()
//写了个data.json文件模拟服务器,请求这个文件
xhr.open("GET", "http://localhost:8080/src/js/data.json", true) xhr.send() xhr.onreadystatechange = () =>{
if(xhr.readyState === 4 && xhr.status === 200){
let data = JSON.parse(xhr.responseText)
//获得服务器的数据并转换为json,使用setState方法覆盖当前元素的datalist数据
this.setState({
datalist : data
})
}
}
}
} module.exports = ImgDemo
src/js/oneImg.js
import React from 'react';
class OneImg extends React.Component{
render(){
var oneData = this.props.oneData;
return <div>
<img className='img' src={oneData.img}/>
<p>{oneData.word}</p>
</div>
} }
module.exports = OneImg
src/js/data.json(模拟服务器数据用的)
[
{
"img":"https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo_top_ca79a146.png",
"word":"百度的图标"
},
{
"img":"https://www.sogou.com/web/img/logo128_50x2.png",
"word":"搜狗的图标"
}
]
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.img{width:300px;height:100px;}
</style>
</head>
<body>
<div id="imgDemo"></div>
<script src="build/bundle.js"></script>
</body>
</html>
其中,package.json、webpack.config.js跟上篇一致。这里不再列出。
安装: npm init
启动:npm run dev
项目地址:http://localhost:8080/index.html
---------------------------
至此,OK
注意:
1)网上的例子很多ajax请求用了jquery。其实,react是不依赖任何其他库的。
2)网上的戏子大多将ajax的url作为prop传给组件,ajax请求时通过this.props对象获取。本例是直接写在请求里面。这个稍作修改就一致了。
参考:
【1】http://www.ruanyifeng.com/blog/2015/03/react.html
【2】React如何从后端获取数据并渲染到前端?中的cheoyx的答案
webpack学习(六)—webpack+react+es6(第3篇)的更多相关文章
- webpack学习笔记—webpack安装、基本配置
文章结构: 什么是webpack? 安装webpack 'webpack基本配置 一.什么是webpack? 在学习react时发现大部分文章都是react和webpack结合使用的,所以在学reac ...
- webpack 学习资料
webpack 学习资料 webpack 学习资料 网址 webpack 中文版 https://webpack.docschina.org/configuration/dev-server/
- webpack学习(六)—webpack+react+es6(第2篇)
接上篇 webpack学习(五)—webpack+react+es6(第1篇) 本文做个简单的图片加文字的页面.其中,配置文件跟上篇一致.项目结构: index.html <!DO ...
- reactjs学习一(环境搭配react+es6+webpack热部署)
reactjs学习一(环境搭配react+es6+webpack热部署) 本文的源码在这里下载 https://github.com/tianxiangbing/webpack-study 或者使 ...
- webpack学习(五)—webpack+react+es6(第1篇)
如果你看过webpack学习系列的前一个文章,接下来做的东西会比较简单 :webpack学习(四)— webpack-dev-server react发展的很快,现在大部分开发react相关的项目,都 ...
- webpack+react+es6开发模式
一.前言 实习了两个月,把在公司用到的前端开发模式做个简单的整理.公司里前端开发模式webpack+react+redux+es6,这里去掉了redux. webpack, react, redux等 ...
- Webpack+React+ES6 最新环境搭建和配置(2017年)
刚刚学习React,发现React在ES6下的语法才是本体,结合ES6新的语言特性,使组件化开发显得更加直观.而且现在的Angular2也开始使用支持强类型的TypeScript,转译(transpi ...
- Webpack+React+ES6开发模式入门指南
React无疑是今年最火的前端框架,github上的star直逼30,000,基于React的React Native的star也直逼20,000.有了React,组件化似乎不再步履蹒跚,有了Reac ...
- [webpack] 配置react+es6开发环境
写在前面 每次开新项目都要重新安装需要的包,简单记录一下. 以下仅包含最简单的功能: 编译react 编译es6 打包src中入口文件index.js至dist webpack配置react+es6开 ...
随机推荐
- [Usaco2007 Dec]队列变换
[Usaco2007 Dec]队列变换 题目 FJ打算带他的N(1 <= N <= 30,000)头奶牛去参加一年一度的“全美农场主大奖赛”.在这场比赛中,每个参赛者都必须让他的奶牛排成一 ...
- poj 1724 最短路+优先队列(两个约束条件)
/*两个约束条件求最短路,用优先队列*/ #include<stdio.h> #include<string.h> #include<queue> using na ...
- POJ - 3538 - Domestic Networks
先上题目: Domestic Networks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 732 Accepted: ...
- .Net程序猿玩转Android开发---(6)线性布局LinearLayout
LinearLayout控件是Android中重要的布局控件,是一个线性控件,所谓线性控件的意思是指该控件里面的内容仅仅能水平或垂直排列.也就 ...
- Spring 计时器 @Scheduled cron 含义
Spring 计时器 @Scheduled cron 含义 学习:http://blog.csdn.net/prisonbreak_/article/details/49180307 http://b ...
- Android 开源框架Universal-Image-Loader全然解析(一)--- 基本介绍及使用
转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303).请尊重他人的辛勤劳动成果,谢谢! 大家好! ...
- update_notifier 造成nodejs进程数量增长的问题
最近运维老大j哥找到我说了一个事儿:某私有化部署的线上环境nodejs进程数量多达1000+,对比公版线上环境的66个进程数显得十分诡异.并且单个nodejs进程所占用swap空间也较大,也不释放空间 ...
- Android Fragment和Activity的交互介绍
Fragment和Activity的交互 一个Fragment的实例总是和包括它的Activity直接相关. fragment能够通过getActivity() 方法来获得Activity的实例.然后 ...
- cocos2d-x开发的《派对小游戏》-github源代码分享
这是博主非常久曾经写的一个cocos2d-x跨平台小游戏,我称它为<派对小游戏>,如今分享给大家.希望对大家有所帮助的话. 项目源代码地址:https://github.com/xieba ...
- [NOI 2003] 逃学的小孩
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1509 [算法] 树的直径 [代码] #include<bits/stdc++. ...