目录:

1、创建组件的第一种方式 function
2、将组件抽离为单独的jsx文件
3、省略.jsx后缀, 配置webpack设置根目录
4、创建组件的第二种方式--使用class关键字创建组件
5、组件私有数据this.state(一般使用ajax获取的数据)
6、有状态组件和无状态组件
7、在组件中使用style行内样式
8、使用css样式表美化组件
9、通过modules参数启用模块化
10、使用localIdentName来自定义模块化的类名
11、通过local和glocal设置类名是否被模块化

创建组件demo见react-helloworld

1、创建组件的第一种方式 function   <--返回目录

// 创建组件的第一种方式(组件名称首字母必须大写)
function Hello() {
return <div>这是Hello组件</div>
}
ReactDOM.render(<Hello></Hello>, document.getElementById('app')) // 为组件传递props数据
function Hello2(props) { // props只读
  return <div>这是Hello2组件, {props.id} + "--" + {props.name} + "--" + {props.age}</div>
}
var user = {id: 1, name: '张三', age: 20}
// ReactDOM.render(<Hello2 id={user.id} name={user.name}></Hello2>, document.getElementById('app'))
ReactDOM.render(<Hello2 {...user}></Hello2>, document.getElementById('app'))

  

  import PropTypes from 'prop-types'

  指定组件this.props 属性默认值:

  Hello2.defaultProps = {name: '张三', age: 20}

  指定组件props属性的类型和必要性

  Hello2.propTypes = {name: PropTypes.string.isRequired, age: PropTypes.number}

2、将组件抽离为单独的jsx文件   <--返回目录

  src目录下创建components/Hello3.jsx

import React from 'react'

// 为组件传递props数据
export default function Hello3(props) { // props只读
return <div>这是Hello3组件, {props.id} + "--" + {props.name} + "--" + {props.age}</div>
}
// export default Hello3

  index.js

import React from 'react'
import ReactDOM from 'react-dom'
// 默认,如果不做配置,不能省略.jsx后缀
import Hello3 from './components/Hello3.jsx' // 将组件抽离为单独的jsx文件
ReactDOM.render(<Hello3 {...user}></Hello3>, document.getElementById('app'))

3、省略.jsx后缀, 配置webpack设置根目录   <--返回目录

  webpack.config.js

var path = require('path')

// 导入在内存中自动生成index页面的插件
const HtmlWebPackPlugin = require('html-webpack-plugin')
const htmlPlugin = new HtmlWebPackPlugin({
template: path.join(__dirname, './src/index.html'),
filename: 'index.html' // 生成的内存中首页的名称
}); module.exports = {
mode: 'development',
plugins: [
htmlPlugin
],
module: {
rules:[
{ test:/\.js|jsx$/, use: ['babel-loader'], exclude: /node_modules/ }
]
},
resolve: {
extensions: ['.js', '.jsx', '.json'], // 这些文件的后缀可以省略
alias: {
'@': path.join(__dirname, './src'
)
}

}
}

4、创建组件的第二种方式--使用class关键字创建组件   <--返回目录

  src目录下创建components/Hello4.jsx

import React from 'react'
// import React, { Component } from 'react' 按需导入 class Hello4 extends React.Component {
render() {
return <div>基于class创建组件, {this.props.id} + '--' + {this.props.name}</div>
}
} export default Hello4

  index.js

import React from 'react'
import ReactDOM from 'react-dom' import Hello4 from './components/Hello4.jsx' var user = {id: 1, name: '张三', age: 20}
ReactDOM.render(<Hello4 {...user}></Hello4>, document.getElementById('app'))

5、组件私有数据this.state(一般使用ajax获取的数据)   <--返回目录

import React from 'react'
// import React, { Component } from 'react' 按需导入 class Hello4 extends React.Component {
constructor() {
super()
this.state = {
msg: 'hello react'

}

}
render() {
return <div>
基于class创建组件, {this.props.id} + '--' + {this.props.name}
<h4>{this.state.msg}</h4>
</div>
}
} export default Hello4

6、有状态组件和无状态组件   <--返回目录

  1)使用class关键字创建的组件,有自己的私有数据和生命周期函数;有状态组件

  2)使用function创建的组件,只有props,没有自己的私有数据和生命周期函数;无状态组件

组件+css样式demo见react-demo-comment

7、在组件中使用style行内样式   <--返回目录

  组件CmtList

import React from 'react'
// import React, { Component } from 'react' 按需导入
import CmtItem from './CmtItem.jsx' class CmtList extends React.Component {
constructor() {
super()
this.state = {
commentList: [
{ id: 1, name: '张三', content: '呵呵,沙发' },
{ id: 2, name: '李四', content: '嘿嘿,板凳' },
{ id: 3, name: '王五', content: '嘻嘻,地板' }
]
}
}
render() {
// return <ul>
// {
// this.state.commentList.map(item =>
// <li key={item.id}>{item.id + "-" + item.name + "-" + item.content}</li>
// )
// }
// </ul> return <div>
{/* 在组件中使用style行内样式 */}
<h2 style={{fontWeight: 500, textAlign: 'center'}}>评论列表</h2>
{
this.state.commentList.map(item =>
<CmtItem key={item.id} {...item}></CmtItem>
)
}
</div>
}
} export default CmtList

  组件CmtItem

import React from 'react'

// 在组件中使用style行内样式并封装样式对象
const styles = {
liStyle: {
height: '50px',
width: '100px',
border: '1px dotted #ccc',
marginTop: '20px'
}
}
export default function CmtItem(item) {
return <li style={styles.liStyle}>
{"评论人: " + item.name}
<br />
{" 评论内容: " + item.content}
</li>
}

8、使用css样式表美化组件  <--返回目录

  安装包 cnpm i style-loader css-loader -D

  配置webpack.config.js

var path = require('path')

// 导入在内存中自动生成index页面的插件
const HtmlWebPackPlugin = require('html-webpack-plugin')
const htmlPlugin = new HtmlWebPackPlugin({
template: path.join(__dirname, './src/index.html'),
filename: 'index.html' // 生成的内存中首页的名称
}); module.exports = {
mode: 'development',
plugins: [
htmlPlugin
],
module: {
rules:[
{ test:/\.js|jsx$/, use: ['babel-loader'], exclude: /node_modules/ },
{ test:/\.css$/, use: ['style-loader','css-loader'] }
]
},
resolve: {
extensions: ['.js', '.jsx', '.json'], // 这些文件的后缀可以省略
alias: {
'@': path.join(__dirname, './src')
}
}
}

  创建css文件

.li-content {
height: 100px;
width: 400px;
border: 1px dotted #ccc;
margin-top: 20px;
line-height: 50px;
}

  组件中使用css样式

import React from 'react'
import cssObj from '../css/CmtItem.css'
export default function CmtItem(item) {
return <li className="li-content">
{"评论人: " + item.name}
<br />
{" 评论内容: " + item.content}
</li>
}

9、通过modules参数启用模块化   <--返回目录

  webpack.config.js配置启用css模块化:{ test:/\.css$/, use: ['style-loader','css-loader?modules'] }

  CmtList.css

.liContent {
height: 100px;
width: 400px;
border: 1px dotted #ccc;
margin-top: 20px;
line-height: 50px;
}

  CmtList2.jsx

import React from 'react'

import cssObj from '../css/CmtItem.css'
console.log(cssObj) // Object { "liContent": "USDMSW5g9Ggx_NYZMVvCq" } export default function CmtItem(item) {
return <li className={cssObj.liContent}>
{"评论人: " + item.name}
<br />
{" 评论内容: " + item.content}
</li>
}

10、使用localIdentName来自定义模块化的类名   <--返回目录

  例子:{ test: /\.css$/, use: ['style-loader', 'css-loader?modules&localIdentName=[path][name]-[local]-[hash:6]']}

11、通过local和glocal设置类名是否被模块化   <--返回目录

  默认是local,当样式不需要模块化时使用:global()

:global(.nav) {
color: red;
}

  使用时,className="类名"

 

React组件(组件属性this.state和this.props,css样式修饰组件)的更多相关文章

  1. React组件三大属性之state

    React组件三大属性之state 组件被称为"状态机", 页面的显示是根据组件的state属性的数据来显示 理解1) state是组件对象最重要的属性, 值是对象(可以包含多个数 ...

  2. [bootstrap] 基本css样式和组件

    一.基本css样式 01.全局设置 全局 font-size 是 14px,line-height 是 20px. 这些样式应用到了 <body> 和所有的段落上. 另外,对 <p& ...

  3. 26-[Boostrap]-全局css样式,组件,控件

    1.全局CSS样式 https://v3.bootcss.com/css/ <!DOCTYPE html> <html lang="zh-CN"> < ...

  4. JS 对html标签的属性的干预以及JS 对CSS 样式表属性的干预

      -任何标签的任何属性都可以修改! -HTML里是怎么写, JS就怎么写   以下是一段js 作用于 css 的 href的 代码   <link id="l1" rel= ...

  5. styled-components:解决react的css无法作为组件私有样式的问题

    react中的css在一个文件中导入,是全局的,对其他组件标签都会有影响. 使用styled-components第三方模块来解决,并且styled-components还可以将标签和样式写到一起,作 ...

  6. class属性中为什会添加非样式的属性值?

    来由 在一些插件中经常看到, 在class属性中出现一些跟样式无关的属性值, 这些值在css样式中没有对应定义, 但是在js中会根据这个值来给dom对象添加特殊的行为, 例如: jquery vali ...

  7. React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

    创建组件的方法,组件的props属性.state属性的用法和特点,父子组件传值,兄弟组件传值 1.react组件 1.1.创建组件的方法 1.1.1.函数组件 定义一个组件最简单的方式是使用JavaS ...

  8. 创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

    1.创建组件的方法   函数组件   class组件 1.1 函数组 无状态函数式组件形式上表现为一个只带有一个 `render()` 方法的组件类,通过函数形式或者 `ES6` 箭头 `functi ...

  9. React组件三大属性之 props

    React组件三大属性之 props 理解1) 每个组件对象都会有props(properties的简写)属性2) 组件标签的所有属性都保存在props中 作用1) 通过标签属性从组件外向组件内传递变 ...

随机推荐

  1. 经验:什么影响了数据库查询速度、什么影响了MySQL性能 (转)

    一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定 ...

  2. C/S软件方案

    互联网时代客户端软件的一些方案 纯Native开发, C++/C#/duilib+C++(Windows), Objective-c(Mac) Qt(Windows/Mac) NW.js/Electr ...

  3. c# TCP/IP协议利用Socket Client通信(只含客户端Demo)

    完全是基础,新手可以随意看看,大牛可以关闭浏览页了,哈哈. TCP/IP协议 TCP/IP是一系列网络通信协议的统称,其中最核心的两个协议是TCP和IP.TCP称为传输控制协议,IP称为互联网络协议. ...

  4. C#委托的定义 以及使用方式详解,更简单的理解委托。

    委托的声明及定义: 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得 ...

  5. cookie转换成字典类型方便scraoy 使用

    #bakooie装换成紫电模式方便scrapy使用 cookid = "_ga=GA1.2.1937936278.1538889470; __gads=ID=1ba11c2610acf504 ...

  6. 01 Go之环境搭建

    1.1 Linux搭建Go环境 1.ssh远程登录Linux服务器,可选用iTerm.xshell ssh root@ip 2.建议配置好阿里云yum源.epel源 安装git yum install ...

  7. element-ui中关闭对话框清空验证,清除form表单数据

    对于elementUI中对话框,点击对话框和关闭按钮 怎么清空验证,清空form表单,避免二次点击还会有 验证错误的提示.今天终于自己查资料解决了,分享给大家 1.首先在你的对话框 取消按钮 加一个c ...

  8. 乐观锁之版本号机制和CAS

    ---恢复内容开始--- 乐观锁:每次去拿数据的时候,都认为别人不会修改,不会加锁,但在更新的时候会去判断一下,此期间别人有没有更新数据,版本号机制和CAS算法就用到乐观锁,参考了https://bl ...

  9. Windows地址栏的妙用

    主角: 它就是windows自带的一个小工具->地址栏,可以通过在任务栏右键选择工具栏-地址栏添加使用. 妙用: 一.打开文件 使用方法:D:\Temp(文件路径) 小提示:快速进入回收站:Re ...

  10. sql 存储过程笔记2

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sys_Page_v2]') and OBJECTPROPE ...