视频地址

main.js

import React from "react"
import { render } from "react-dom"
import App from "./App.js" render(
<App></App>,
document.getElementById("app-container")
)

App.js

// 引入 React 和 Component 组件
import React, { Component } from "react";
import Bar from "./components/Bar/Bar.js";
import "./app.less"; class App extends Component {
constructor() {
super() this.state = {
r: 128,
g: 128,
b: 128
} // 三个 Bar 实例
this.bars = ['r', 'g', 'b'].map((item, index) => {
return <Bar key={index} v={this.state[item]} color={item} setColor={(this.setColor).bind(this)}></Bar>
})
} // 设置函数,可以改变 color 颜色为 value
setColor(color, value) {
this.setState({ [color]: value })
}
render() {
return (
<div>
<div className="box" style={{ "backgroundColor": `rgb(${this.state.r},${this.state.g},${this.state.b})` }}></div>
{this.bars}
</div>
)
}
} //向外暴露
export default App;

app.less

.box {
width: 200px;
height: 200px;
border: 1px solid #333;
}

Bar.js

import React from "react";
import "./css.less";
import {PropTypes} from "prop-types"; class Bar extends React.Component {
constructor(props) {
super() this.state = {
v: props.v
} // 绑定this
this.change = (this.change).bind(this) this.setColor = props.setColor
} // 改变颜色
change(event) {
this.setState({'v': parseInt(event.target.value)})
this.setColor(this.props.color, this.state.v)
} render() {
return (
<div className="Bar_kaola">
<div className="bar">
{this.props.v}
<input type="range" min="0" max="255" value={this.state.v} onChange={this.change} />
<input type="number" min="0" max="255" value={this.state.v} onChange={this.change} />
</div>
</div>
)
}
} Bar.propTypes = {
v : PropTypes.number.isRequired,
color : PropTypes.string.isRequired,
setColor : PropTypes.func.isRequired
} //向外暴露
export default Bar

Bar/css.less:

.Bar_kaola {
.bar {
input[type="number"] {
width: 50px;
position: relative;
top: -2px;
} margin-bottom: 10px;
}
}

package.json:

  "devDependencies": {
"@babel/core": "^7.4.4",
"@babel/plugin-transform-runtime": "^7.4.4",
"@babel/preset-env": "^7.4.4",
"@babel/preset-react": "^7.0.0",
"babel-loader": "^8.0.5",
"css-loader": "^2.1.1",
"less": "^3.9.0",
"less-loader": "^5.0.0",
"prop-types": "^15.7.2",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"style-loader": "^0.23.1",
"webpack": "^4.30.0",
"webpack-cli": "^3.3.2"
},
"dependencies": {
"@babel/runtime": "^7.4.4"
}

webpack.config.js

const path = require('path');

module.exports = {
entry: "./app/main.js",
output: {
path: path.resolve(__dirname, "dist"),
filename: "all.js"
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader'
}
},
{
test: /\.less$/,
use: [
{
loader: "style-loader" // creates style nodes from JS strings
},
{
loader: "css-loader" // translates CSS into CommonJS
},
{
loader: "less-loader" // compiles Less to CSS
}
]
}
]
},
watch: true
}

最新文章

  1. jQuery UI Datepicker
  2. es6之set和map
  3. Jquery UI 和Easy UI常用插件
  4. UISegmentedControl(人物简介)
  5. 我的开发框架之ORM框架
  6. Bootstrap页面布局10 - BS表格
  7. Ubuntu下安装lamp
  8. ORACLE 包[转]
  9. linux下expect使用教程
  10. BI跟报表一样吗?
  11. 登陆shell与交互式非登陆shell的区别
  12. 敏捷软件开发之TDD(一)
  13. 深入剖析Linux I/O操作与标准I/O操作区别与联系
  14. Unity shader 官网文档全方位学习(二)
  15. PowerShell工作流学习-1-嵌套工作流和嵌套函数
  16. LeetCode14.最长公共前缀
  17. log4j2笔记 #04# Appender的三个基本款以及RollingFile的各种示例配置
  18. 20155302《网络对抗》Exp8 Web基础
  19. appstore防代充的一些想法
  20. SQLServer 大小写转换

热门文章

  1. (编辑状态下)Reset及OnValidate使用
  2. Eclipse设置jvm参数的三种方式
  3. spring源码第二章_容器的基本实现
  4. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:匿名内部类
  5. PyCharm配置TensorFlow开发环境
  6. 把自己的项目发布到maven仓库并在maven和gradle中开始使用
  7. 015、Java中定义变量时不设置内容,使用变量前设置内容
  8. 4.RabbitMQ 4种交换模式
  9. Combobox出现System.Data.DataRowView的原因
  10. java格式化代码(java格式化代码工具类)