React笔记_(3)_react语法2
state和refs
props就是在render渲染时,向组件内传递的变量,这个传递是单向的,只能继承下来读取。
如何进行双向传递呢?
state (状态机)
React 把组件看成是一个状态机(State Machines)。通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致。
React 里,只需更新组件的 state,然后根据新的 state 重新渲染用户界面(不要操作 DOM)。
下面是一个例子。
一个文本框,一个按钮,按钮点击控制文本框的可用和不可用。
'use strict';
import React, { Component } from 'react';
import ReactDOM from 'react-dom'; class InputState extends Component { constructor(props) {
super(props); this.state = { enable: false };
} inputClick() {
this.setState({ enable: !this.state.enable });
} render() { return (
<p>
<input type="text" disabled={this.state.enable} />
<button type="button" onClick={this.inputClick.bind(this)}>change input state</button>
</p>
); } } ReactDOM.render(<InputState />,
document.getElementById("app")
);
refs
React 支持一种非常特殊的属性 Ref ,你可以用来绑定到 render() 输出的任何组件上。
这个特殊的属性允许你引用 render() 返回的相应的支撑实例( backing instance )。这样就可以确保在任何时间总是拿到正确的实例。
举个例子:
一个文本框输入内容,点击按钮获取内容。
'use strict';
import React, { Component } from 'react';
import ReactDOM from 'react-dom'; class InputContent extends Component { getInputValue() {
var inputValue = this.refs.myInput.value;
alert(inputValue);
} render() { return (
<p>
<input type="text" ref="myInput" />
<button type="button" onClick={this.getInputValue.bind(this)}>get input value</button>
</p>
); } } ReactDOM.render(<InputContent />,
document.getElementById("app")
);
了解到了state和refs的用法,做一个简单的小功能吧。
一个文本框和一组数据,在文本框中输入内容,对这组数据进行过滤。
'use strict';
import React,{ Component } from 'react';
import ReactDOM from 'react-dom';
//小部件,渲染为ul列表
class Items extends Component {
render(){
var arrLi = [];
for(let i=0;i<this.props.info.length;i++){
//注意,这里可不是拼接字符串!
arrLi.push(<li key={i}>{this.props.info[i]}</li>);
}
return (<ul>{arrLi} </ul>);
}
}
//大部件
class Box extends Component {
constructor(props){
super(props);
this.state = {
list:this.props.sourceData
}
}
checkSth(){
var arr = [];
//获取文本框信息
var inputValue = this.refs.myInput.value;
//获取props信息
var sourceData = this.props.sourceData;
//筛选数据
for(let i=0;i<sourceData.length;i++){
if(sourceData[i].indexOf(inputValue)!=-1){
arr.push(sourceData[i]);
}
}
//更新状态机
this.setState({list:arr});
}
render(){
return (
<div>
<input type="text" ref="myInput" onKeyUp={this.checkSth.bind(this)}/>
<Items info={this.state.list} />
</div>
);
}
}
var data = ['jackson','milly','john smith','mike','jenny'];
ReactDOM.render(
<Box sourceData={data} />,
document.getElementById('app')
);
就这么多吧。
感觉一会不用,就渐渐的忘记了哇。
还是老套路:
React笔记_(3)_react语法2的更多相关文章
- React笔记_(2)_react语法1
这一节内容主要以了解为主. 渐渐的体会react的语法和其特性. ① htmlAndJs 混合编写 react和以往的前后台书写方式不一样. 在之前的多个语言中,讲求的是将页面代码和js代码逻辑分开, ...
- React笔记_(6)_react语法5
react的版本 目前主要的react有 ES5,ES6.也有ES5和ES6混合编写的.比较混乱. react官方提倡用ES6. 说到这里,就需要提到一个概念--mixin mixin在es6中被摒弃 ...
- React笔记_(5)_react语法4
ajax 数据应用场景 在真实的开发环境中,拿到了产品需求,第一件事不是逼着后台开发人员先完成,然后前端再介入开发,这样太浪费时间. 正确的做法是跟后端人员先商量好接口名称,请求参数,返回的数据格式等 ...
- React笔记_(4)_react语法3
生命周期 很多语言中都讲了关于生命周期.这可是决定生命的周始,有没有存在感的关键啊. 生命周期,有生有死,有始有终,因果轮回,循环往复.(说多了) react中,主要说明的是 一个组件的生命周期.简单 ...
- React笔记_(7)_react路由
路由 路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程. 路由器当然是作为一个转发设备出现的,主要是转发数据包来实现网络互联. 那么react的路由到底指的是什么呢? 举个 ...
- React笔记_(1)_react概述
React概述 React是一种很好的前端技术. 它将应用打散成独立的小模块,然后进行组装,完成开发. react远比angularjs难学的多. react依赖的如webpack等各种工具得先学 ...
- 运维开发笔记整理-Django模型语法
运维开发笔记整理-Django模型语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.模型基本概念 1>.什么是模型 模型是你的数据唯一的,权威的信息源.它包含你所存储数 ...
- 《DOM Scripting》学习笔记-——第二章 js语法
<Dom Scripting>学习笔记 第二章 Javascript语法 本章内容: 1.语句. 2.变量和数组. 3.运算符. 4.条件语句和循环语句. 5.函数和对象. 语句(stat ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_发布者策略控制
在 读经典——<CLR via C#>(Jeffrey Richter著) 笔记_高级管理控制(配置)中,是由程序集的发布者将程序集的一个新版本发送给管理员,后者安装程序集,并手动编辑应用 ...
随机推荐
- Java的浮点数和整数的进制转换
整数的表达 –原码:第一位为符号位(0为正数,1为负数) –反码:符号位不动,原码取反 –负数补码:符号位不动,反码加1 –正数补码:和原码相同 -6 5 原码 10000110 0 ...
- Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式
Linux就这个范儿 第15章 七种武器 linux 同步IO: sync.fsync与fdatasync Linux中的内存大页面huge page/large page David Cut ...
- MOGRE学习笔记(2) - MOGRE基础知识总结
前一篇配置了MOGRE的运行环境,这里记录一些MOGRE基础知识,仅仅是最基础的一些东西.由于本人接触ogre的时间比较短,对于很多知识都是一知半解,所以理解起来不免会有一些错误,本人也希望自己在对o ...
- Linux 技巧:让进程在后台可靠运行的几种方法
我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开 ...
- MongoDB安装、管理工具、操作
1. mongoDB安装.启动.关闭 1.1 下载安装包 wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.3.tgz 1.2 ...
- iOS 设置导航栏的颜色和导航栏上文字的颜色
#import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...
- ios-点击图片放大,背景变半透明
在view中点击一个图片,图片放大,背景变半透明,图片不会变透明的效果图如下 思路:图片框是一个按钮,监听点击事件. 当点击图片后:改变图片的frame,使图片放大,并且在controller.vie ...
- ORACLE 11G内存管理方式
SGA包含的组件: 组件名 说明 参数 buffer cache 存放从数据文件中读取的数据拷贝,所有用户之间是可以共享的 db_cache_size db_keep_cache_size db_re ...
- Java基础之写文件——缓冲区中的多条记录(PrimesToFile3)
控制台程序,上一条博文(PrimesToFile2)每次将一个素数写入到文件中,所以效率不是很高.最好是使用更大的缓冲区并加载多个素数. 本例重复使用三个不同的视图缓冲区加载字节缓冲区并尽可能加入更多 ...
- IntelliJ IDEA Community Edition 14.1.4下 javafx scenebuilder的使用
官网对应的配置文档:https://www.jetbrains.com/idea/help/preparing-for-javafx-application-development.html Java ...