```
### css预处理、后处理
开发过程中使用Sass、Less、Stylus等css预处理
```javascript
// webpack.config.js
{
// 基本的css loader
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
},
{
test: /\.styl$/,
use: [
'style-loader',
'css-loader',
{
loader: 'postcss-loader',
options: {
sourceMap: true
}
},
'stylus-loader'
]
}
```
更进一步,加载postcss后处理器
```javascript
// webpack.config.js
{
test: /\.styl$/,
use: [
'style-loader',
'css-loader',
{
loader: 'postcss-loader',
options: {
sourceMap: true
}
},
'stylus-loader'
]
}
```
根目录新建postcss.config.js配置文件
```javascript
const autoprefixer = require('autoprefixer') // 加载autoprefixer(浏览器兼容前缀)
module.exports = {
plugins: [
autoprefixer()
]
}
```
## JSX
> React的核心机制之一就是可以在内存中创建虚拟的DOM元素。React利用虚拟DOM来减少对实际DOM的操作从而提升性能。
JSX就是Javascript和XML结合的一种格式。React发明了JSX,利用HTML语法来创建虚拟DOM。当遇到<,JSX就当HTML解析,遇到{就当JavaScript解析。
如何在vue中使用jsx?
```javascript
// webpack.config.js
{
test: /\.jsx$/,
loader: 'babel-loader'
}
// 需要的package
"babel-core": "^6.26.0",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
"babel-loader": "^7.1.2",
"babel-plugin-syntax-jsx": "^6.18.0",
"babel-plugin-transform-vue-jsx": "^3.5.0"
// .babelrc
{
"presets": [
"env"
],
"plugins":[
"transform-vue-jsx"
]
}
// jsx文件
import '../assets/style/footer.styl'
export default {
data() {
return {
author: 'Ioodu'
}
},
render() {
return (
)
}
}
```
facebook.github.io [JSX语法](http://facebook.github.io/jsx/)
## vue组件间通信
> 组件实例的作用域是孤立的。这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据。父组件的数据需要通过 prop 才能下发到子组件中。
父组件
```vue
```
父组件业务逻辑处理
```javascript
// 引入组件
components: {
Item,
Tabs,
},
methods: {
deleteTodo(id) {
this.todos.splice(this.todos.findIndex(todo => todo.id === id), 1)
},
}
```
子组件
```vue
```
```javascript
props: {
todo: {
type: Object,
required: true
}
},
methods: {
deleteTodo(){
this.$emit('del', this.todo.id) // 触发事件 并且带参数
}
}
```
## webpack打包优化的基本点
1. 分离css
...