webpack4+React组件使用

创建组件
方式一:全局创建组件 注意:组件名称:首字母必须大写
function HelloWorld(props){
//必须return 合法的jsx 元素
//return null;
//注意:props 只读
return

组件方式一:全局创建 HelloWorld{ props.name}
;
}
**方式二:**使用class 继承
入门案例:
1.安装:
webpack:
cnpm install webpack webpack-cli -D
webpack-dev-server:
cnpm i webpack-dev-server -D
babel:
cnpm i babel-loader -D
cnpm i @babel/core @babel/plugin-transform-runtime @babel/preset-env -D
cnpm install @babel/runtime @babel/runtime-corejs2 -S
cnpm i @babel/preset-react -D
cnpm i @babel/plugin-proposal-class-properties -D
cnpm i babel-plugin-transform-class-properties -D
React:
cnpm i react react-dom -S
html:
cnpm install html-webpack-plugin -D
CSS:
cnpm install style-loader css-loader -d
2.配置文件
package.json
{
“name”: “day02”,
“version”: “1.0.0”,
“description”: “”,
“main”: “webpack.config.js”,
“scripts”: {
“test”: “echo “Error: no test specified” && exit 1”,

  • "dev": "webpack-dev-server --open --port 3000 --hot --host 127.0.0.1"
    },
    “keywords”: [],
    “author”: “”,
    “license”: “ISC”,
    “devDependencies”: {
    “@babel/core”: “^7.4.3”,
    “@babel/plugin-syntax-class-properties”: “^7.2.0”,
    “@babel/plugin-transform-runtime”: “^7.4.3”,
    “@babel/preset-env”: “^7.4.3”,
    “@babel/preset-react”: “^7.0.0”,
    “babel-loader”: “^8.0.5”,
    “babel-plugin-transform-class-properties”: “^6.24.1”,
    “babel-plugin-transform-property-literals”: “^6.9.4”,
    “css-loader”: “^2.1.1”,
    “html-webpack-plugin”: “^3.2.0”,
    “style-loader”: “^0.23.1”,
    “webpack”: “^4.30.0”,
    “webpack-cli”: “^3.3.0”,
    “webpack-dev-server”: “^3.3.1”
    },
    “dependencies”: {
    “@babel/runtime”: “^7.4.3”,
    “@babel/runtime-corejs2”: “^7.4.3”,
    “react”: “^16.8.6”,
    “react-dom”: “^16.8.6”
    }
    }
    .babelrc
    {
    “presets”: [
    “@babel/preset-env”,"@babel/preset-react"
    ],“plugins”: [
    “@babel/plugin-transform-runtime”,
    “@babel/plugin-syntax-class-properties”,
    “transform-class-properties”
    ]
    }
    webpack.config.js
    const path=require(‘path’)
    //把html映射的项目跟目录
    const HtmlWebPackPlugin=require(‘html-webpack-plugin’)
    //

//创建插件实例
const htmlPlugin=new HtmlWebPackPlugin({
template:path.join(__dirname,’./src/index.html’),//源文件
plugins:‘index.html’//映射的目录,默认项目跟目录

})
//向外暴露一个配置对象
module.exports={
mode:‘development’,//development ,production
plugins:[//第三方插件
htmlPlugin
],module:{//第三方模块匹配规则
rules:[
{
test:/.js|jsxKaTeX parse error: Expected 'EOF', got '}' at position 71: …de_modules/ }̲,{ test:/\.…/,//匹配规则
use:[‘style-loader’,‘css-loader?modules’]//指定解析器 //?modules css启用模块化,防止样式冲突
}
]
},resolve:{//省略后缀名,不配置,默认只能 省略.js 和.json
extensions: [’.js’, ‘.jsx’, ‘.json’],
alias:{//取别名
‘@’:path.join(__dirname,’./src’) //表示把src目录,可以使用@替代
}
}
}
3.代码:
index.html
<html>
<head>
</head>
<body>
<div id=“app”>
</body>
</html>
index.js
//导入组件:生成虚拟DOM对象,生命周期
import React from ‘react’
//导入组件:把创建好的组件和虚拟DOM对象,渲染到页面
import ReactDOM from ‘react-dom’

//导入外部组件 注意默认情况下,后缀名称,不能省略
//使用 @ 符号替代 src 目录,需要配置 webpack.config.js文件,取别名
import CmtList from ‘@/components/CmtList’
ReactDOM.render(<div>
组件
{
//使用组件,方式一:把组件名称当作标签使用
}
<CmtList></CmtList>
</div>,document.getElementById(‘app’))
CmtList.jsx
//导入组件:生成虚拟DOM对象,生命周期
import React from ‘react’
//导入列表项
import CmtIteml from ‘@/components/CmtIteml’
//导入css样式 整个项目生效,这要组件多了,会导致样式冲突
//通过配置文件webpack.config.js开启css 模块化
//开启模块化后,会为每一个样式生成一个唯一的字符串
import cmtcss from ‘@/css/cmtlist.css’
//开启模块后 cmtcss 就有值了,使用样式是,通过这对象,获取生成的唯一字符串

export default class CmtList extends React.Component{
constructor(){
super()
this.state={
datas:[
{id:1,user:‘aaa’,content:‘哈哈沙发12’},
{id:2,user:‘bbb’,content:‘哈哈沙发df’},
{id:3,user:‘ccc’,content:‘哈哈沙发sd’},
]
}
}
render(){
return <div >
<h1 className={cmtcss.title}>评论人列表</h1>
{this.state.datas.map(item=><CmtIteml key={item.id} {…item}>)}
</div>;
}
}
CmtIteml.jsx
//导入组件:生成虚拟DOM对象,生命周期
import React from ‘react’
import cmtcss from ‘@/css/cmtlist.css’

export default function CmtIteml(props){
//必须return 合法的jsx 元素
//return null;
//注意:props 只读
return <div className={cmtcss.cmtbox}>
<h1 className={cmtcss.content}>评论人:{props.user}</h1>
<p>评论内容:{props.content}</p>
</div>;
}
cmtlist.css
.title{
font-size:14px;
color:red
}

.content{
font-size:12px;
}

.cmtbox{
border:1px dashed #ccc;
margin:10px;
padding:10px;
box-shadow:0 0 10px #ccc;

}

项目结构:
demo:
.babelrc
package.json
webpack.config.js
|-src
    |-components
        |-CmtIteml.jsx
        |-CmtList.jsx
    |-css
        |-cmtlist.css
    |-index.html
    |-index.js
|-dist
案例下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值