一、条件渲染
语法:使用原生 js 的 if 或者 三元表达式 判断
 
例子:判断用户是否登录,提示:已登录、未登录 (User组件)

<script type="text/babel">
// 判断用户是否登录,提示:已登录、未登录 (User组件)
class Login extends React.Component{
constructor(props) {
super(props)
this.state = {
token : "adasd"
}
}
render(){
let {
token
} = this.state
// if(token){
// return <div><p>已登录</p></div>
// }else{
// return <div><p>未登录</p></div>
// }
return <div><p>{ token ? '已登录' : '未登录' }</p></div>
}
} ReactDOM.render(<Login />,document.querySelector('#app'))
</script>
 
二、列表 & key
语法:
forEach 	遍历数组
map		修改数组的数据,返回一个【修改过】的数组
filter  	过滤数组的数据,返回一个【新】的数组
find    	找值
findIndex   找下标
let newArr = arr.map((item,index)=> {// 遍历arr数组,将里面的值挨个赋值给item
return 数据 // return的数据会push到newArr中
})
例子:
        <script type="text/babel">
class List extends React.Component{
constructor(props){
super(props)
this.state = {
list : ['周瑜','小乔','诸葛'],
listObj : [
{id:1,content:'xxxxx1'},
{id:2,content:'xxxxx2'},
{id:3,content:'xxxxx3'},
{id:4,content:'xxxxx4'}
]
}
} render() {
let {
list,
listObj
} = this.state let listNew = list.map((item,index) => {
return <li key={index}>{ item }</li>
})
let newListObj = listObj.map((item,index) => {
return <li key={index}>id:{ item.id },content:{ item.content }</li>
}) return <div>
<p>数组</p>
<ul>{listNew}</ul>
<p>对象</p>
<ul>{newListObj}</ul>
</div>
}
} ReactDOM.render(<List />,document.querySelector('#app'))
</script>
三、表单
① 受控组件
渲染表单的React组件还控制着用户输入过程中表单发生的操作
② 非受控组件
value值为只读的0
如:input type='file'
 
③ 数据双向绑定
1. 绑定 value 值
2. change 事件触发
3. 跟新模型数据
 
例子:
<script type="text/babel">
class Test extends React.Component{
constructor(props){
super(props) // 模型数据
this.state = {
value1 : 'value1',
value2 : 2,
value3 : 'value3'
}
} render() {
let {
value1,
value2,
value3
} = this.state
return (
<div>
<p>input</p>
<input type="text" name="value1" value = {value1} onChange = { this.onChangeFn.bind(this) }/>
<p>select</p>
<select name="value2" value = {value2} onChange = { this.onChangeFn.bind(this) }>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<p>textarea</p>
<textarea name="value3" value = {value3} onChange = { this.onChangeFn.bind(this) }></textarea>
</div>
)
} // 方法
onChangeFn(e){
// 获取数据
let value = e.target.value
let name = e.target.name // 更新数据
this.setState({
[name]:value
})
}
} ReactDOM.render(<Test />,document.querySelector('#app'))
</script>
四、组件样式
语法:
① 外部引入
<link rel="stylesheet" href="路径及文件名.css">
② 行内样式
<标签名 style={ {css属性名:属性值,....,css属性名n:属性值n} }></标签名>
 
 
注:React 中添加 class 通过 className
<p className = {'aa'}>22</p>
 
五、ref标记
语法;
<标签 ref="标识"></标签名>
this.refs.标识   使用该语法获取DOM元素
 
六、组件通信
① 父传子
语法
父在调用子组件上传递数据
子通过this.props.键获取数据
 
例子
 
② 子传父
语法
父定义普通方法接受数据
子调用普通方法传递数据
 
例子
<script type="text/babel">
class Test1 extends React.Component{
constructor(props){
super(props) // 更改 this 指向
this.sendData = this.sendData.bind(this) this.state = {
msg :''
}
} render(){
return (
<div>
<p ref={'test'}>Test1</p>
{/* 传递方法 */}
<Test2 sendData = {this.sendData}/>
</div>
)
}
// 方法
// 接收数据
sendData(data){
console.log('子数据',data); // 更改数据
this.setState({
msg : data
})
}
} class Test2 extends React.Component{
constructor(props){
super(props)
this.state = {
msg:'5566'
}
}
componentDidMount(){
// 传递数据
this.props.sendData(this.state.msg)
}
render(){
return (
<div>
<p ref={'test'}>Test2</p>
</div>
)
}
} // 页面加载
ReactDOM.render(<Test1 />,document.querySelector('#app'))
</script>
③ 非父子
语法
父在调用n个子组件上传递数据(公共父)
子通过this.props.键获取数据
 
例子
<script type="text/babel">
//定义公共父类
class Test extends React.Component {
constructor(props) {
super(props) this.state = {
age:15
}
} render() {
return (
<div>
<p ref={'test'}>Test0</p>
{/* 传递数据 */}
<Test1 sendAge = {this.state.age}/>
<Test2 sendAge = {this.state.age}/>
</div>
)
} } class Test1 extends React.Component {
constructor(props) {
super(props) this.state = {
msg: ''
}
} render() {
return (
<div>
<p ref={'test1'}>Test1</p>
{/* 接受使用数据 */}
<p>{this.props.sendAge}</p>
</div>
)
}
} class Test2 extends React.Component {
constructor(props) {
super(props)
this.state = {
msg: '5566'
}
}
render() {
return (
<div>
<p ref={'test2'}>Test2</p>
{/* 接受使用数据 */}
<p>{this.props.sendAge}</p>
</div>
)
}
} // 页面加载
ReactDOM.render(<Test />, document.querySelector('#app'))
</script>
 

02-React基础语法(2)的更多相关文章

  1. php从入门到放弃系列-02.php基础语法

    php从入门到放弃系列-02.php基础语法 一.学习语法,从hello world开始 PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器&qu ...

  2. react基础语法(五) state和props区别和使用

    props的验证: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  3. React基础语法学习

    React主要有如下3个特点: 作为UI(Just the UI) 虚拟DOM(Virtual DOM):这是亮点 是React最重要的一个特性 放进内存 最小更新的视图,差异部分更新 diff算法 ...

  4. react 基础语法复习2- react入门以及JSX

    引入 react 以及 ReactDom import React from 'react'; import ReactDOM from 'react-dom'; 将react组件渲染到真实dom节点 ...

  5. react基础语法(一)元素渲染和基础语法规则

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. react 基础语法使用

    刚开始不久react,在菜鸟上及其他前辈网站上学习,下面开始我的自学笔记. 包括: 渲染元素 组件(函数方法定义.es6 class定义) 事件处理 条件渲染 列表 下面代码部分将不会再写html部分 ...

  7. react基础语法二

    这里只是对自己的学习进行一次总结,也是为了让自己以后如果长时间不使用快速记忆起来的笔记,如果想要学习,还是去官网看文档比较好一些.. 注意 下面的代码的 script标签的type类型都为 “text ...

  8. 02 Java 基础语法

    在开始 Java 基本语法之前,先说明 Java 程序的基本规范: 大小写敏感,例如 Person 和 person 是不同的 类名首字母大写,如果类名由多个单词组成,每个单词首字母都大写,例如 He ...

  9. react 基础语法复习3- 数据传递 & 数据变化(props&&state)

    react当中的数据传递是通过 props以及 state来实现的 props <Header name="kugeliu" /> Header组件当中有个name属性 ...

  10. react 基础语法复习1- 搭建开发环境

    之前有看过阮一峰老师的react教程跟着做了一遍,学习了一下.好久没看,有点忘记了,这次跟着脚手架工具系统的复习一遍.顺便学习学习 react-router 和 redux 首先,脚手架工具我使用的是 ...

随机推荐

  1. SQL Server 2012 安装完成后,无法通过 sa账号登录

    1.打开 SQL server  configuration manager 2.打开 SQLserver 网络配置 打开 SQLSERVER的协议 3.右击 TCP/IP协议,选择 IPALL ,在 ...

  2. supervisor管理tomcat

    操作目的:用supervisor工具管理tomcat服务 配置环境,安装服务,以及多实例 脚本编辑: 前提 机器的opt目录下必须有jdk-8u131-linux-x64_.rpm 以及apache- ...

  3. Kafka常用topic操作命令汇总

    offset topic consumer-group consumer producer producer-golang topic 工具 https://cwiki.apache.org/conf ...

  4. Python logging记录日志

    Python logging记录日志 调试的几种方法: 使用print()在控制台上输出 使用assert断言 使用logging模块 logging提供了一组便利的函数,用来做简单的日志,(当然也能 ...

  5. MBMD(MobileNet-based tracking by detection algorithm)作者答疑

    If you fail to install and run this tracker, please email me (zhangyunhua@mail.dlut.edu.cn) Introduc ...

  6. 《Python学习手册 第五版》 -第4章 介绍Python对象类型

    本章的内容主要是介绍了Python的核心对象类型,后续的5.6.7.8.9章针对这些核心类型分别展开详细的说明 本章我认为重要的有几点 1.作者有谈到Python的知识结构,这个我感觉是一个大框架,可 ...

  7. tar命令详解及使用实例

    tar命令 [root@linux ~]# tar [-cxtzjvfpPN] 文件与目录 …. 参数: -c :创建压缩文件 -x :解开压缩文件 -t :查看tar包里面的文件! 上面3个参数只能 ...

  8. 博客圆美化主题推荐之Slience

    博客圆美化主题推荐之Slience 一.前言 本博客美化主题作者为:Esofar,本文仅在教导如何快速把该美化主题应用到自己的博客中,详细部署内容见Silence - 专注于阅读的博客园主题. 二.博 ...

  9. k8s集群PHP环境使用

    一.环境介绍 k8s版本: 1.15.2 存储: 阿里云NAS 测试代码: wordpress 二.下载wordpress和创建好数据库等 1.下载wordpress wget https://cn. ...

  10. LVS 部署

    一.LVS的组成 LVS 由2部分程序组成,包括 ipvs 和 ipvsadm. 1. ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码.2 ...