配置webpack-dev-server、速过元素,组件,事件,
2018-06-23 本文已影响13人
在路上phper
上节课我们快速的搭建了webpack结合react 但是我们每次修改代码运行项目需要通过yarn run build 这样才行 这种方式太麻烦了
这节我们先配置下webpack-dev-server 修改代码后无需重新编译会自动刷新
首先安装
yarn add webpack-dev-server
安装好后按照官网配置下webpack-dev-server
只能用于开发环境 生产环境不适用
在webpack.config.js中加入如下
![](https://img.haomeiwen.com/i2509361/1b7da516f7031fbd.png)
接下来在package.json中加入如下内容
![](https://img.haomeiwen.com/i2509361/3d065dce16327d7c.png)
然后在cmd窗口执行yarn run dev就可以启动网站了
![](https://img.haomeiwen.com/i2509361/1d967416258a76b4.png)
浏览器访问localhost:9000
![](https://img.haomeiwen.com/i2509361/d5ed0d4bb4650335.png)
默认访问index.html
因为我们生成的文件名是index.html(这个可以默认不写) 如果是别的文件名 则需要写
接下来看下reactjs的一些概念
元素
![](https://img.haomeiwen.com/i2509361/642094db35109b92.png)
这里的me就是一个元素 只能有一个根节点
运行效果
![](https://img.haomeiwen.com/i2509361/c90318c5b07c76e5.png)
元素里面还可以这样写
![](https://img.haomeiwen.com/i2509361/1a4e3a1d64b814c2.png)
大括号里面写入一段脚本(可以是函数)是一个表达式
![](https://img.haomeiwen.com/i2509361/fb8324229c1878ab.png)
一般来说页面上是需要创建组件的
接下来看下组件
创建一个组件
![](https://img.haomeiwen.com/i2509361/a4f6dd63df85c610.png)
es2015的写法 里面继承React.Component
里面有个render方法 返回一个根元素
运行结果
![](https://img.haomeiwen.com/i2509361/53558e038ef3c7e8.png)
上面是一个静态组件 既然我们用到了组件 必定是要传参数
那么如何传递参数呢?
通过props属性集合(是一个只读的 一旦外部传递了以后内部不可以修改)
组件或元素内部要对属性进行脚本的操作 要放到大括号里面
一旦调用组件时 设置了某个属性 则可以通过this.props.key名来获取
下面看下代码
![](https://img.haomeiwen.com/i2509361/311acfd6c27c91ea.png)
运行结果
![](https://img.haomeiwen.com/i2509361/c85f847469b47fe5.png)
![](https://img.haomeiwen.com/i2509361/2d65b4b97e80d035.png)
![](https://img.haomeiwen.com/i2509361/dd70614c54243cf0.png)
以上是最基本的传参 在Me组件里通过key value传参
还可以传递对象
如下
![](https://img.haomeiwen.com/i2509361/2e633013aeb83de9.png)
![](https://img.haomeiwen.com/i2509361/6c2ea76fa279d6e1.png)
还可以使用es2015的对象解构的方式传递
![](https://img.haomeiwen.com/i2509361/197b581f2e746760.png)
运行结果
![](https://img.haomeiwen.com/i2509361/73a38f6aa80501ee.png)
事件传递
![](https://img.haomeiwen.com/i2509361/5c8f7831575f2030.png)
在组件里面定义了一个showMe方法
在输入框的点击事件上调用了showMe方法 注意这里传递的是showMe这个function而不是执行showMe的结果
运行结果
![](https://img.haomeiwen.com/i2509361/5ff6ba39c28ec60e.png)
点击按钮
![](https://img.haomeiwen.com/i2509361/83f8c87e93b5094e.png)
如果不想在组件中定义函数 还可以在大括号中直接写函数
![](https://img.haomeiwen.com/i2509361/651536e3f175a3b4.png)
运行结果
![](https://img.haomeiwen.com/i2509361/1bacd3146847c7dd.png)
大括号里还可以改成剪头函数
![](https://img.haomeiwen.com/i2509361/3a40d8e465aeb1bd.png)
运行结果
![](https://img.haomeiwen.com/i2509361/2d9f94f5457b4565.png)
同时函数里面可以访问props属性里面的值
![](https://img.haomeiwen.com/i2509361/d79dd996c02d5e29.png)
运行结果
![](https://img.haomeiwen.com/i2509361/84cefa871393a45a.png)
这里是用了箭头函数 this指向当前组件
如果是匿名函数的形式 则需要改为如下
![](https://img.haomeiwen.com/i2509361/2a81b290522fe7f2.png)
因为匿名函数中的this表示当前function里面的对象 需要将this绑定的组件上
运行结果
![](https://img.haomeiwen.com/i2509361/733bb504ad998c16.png)
以上就是简单的传递事件
接下来看下组件循环输出
比如我们外部传递的是一个数组
![](https://img.haomeiwen.com/i2509361/095b08b65a371bc6.png)
![](https://img.haomeiwen.com/i2509361/5c47654b5dd98d28.png)
运行结果
![](https://img.haomeiwen.com/i2509361/59f060741963c007.png)