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的更多相关文章

  1. React笔记_(2)_react语法1

    这一节内容主要以了解为主. 渐渐的体会react的语法和其特性. ① htmlAndJs 混合编写 react和以往的前后台书写方式不一样. 在之前的多个语言中,讲求的是将页面代码和js代码逻辑分开, ...

  2. React笔记_(6)_react语法5

    react的版本 目前主要的react有 ES5,ES6.也有ES5和ES6混合编写的.比较混乱. react官方提倡用ES6. 说到这里,就需要提到一个概念--mixin mixin在es6中被摒弃 ...

  3. React笔记_(5)_react语法4

    ajax 数据应用场景 在真实的开发环境中,拿到了产品需求,第一件事不是逼着后台开发人员先完成,然后前端再介入开发,这样太浪费时间. 正确的做法是跟后端人员先商量好接口名称,请求参数,返回的数据格式等 ...

  4. React笔记_(4)_react语法3

    生命周期 很多语言中都讲了关于生命周期.这可是决定生命的周始,有没有存在感的关键啊. 生命周期,有生有死,有始有终,因果轮回,循环往复.(说多了) react中,主要说明的是 一个组件的生命周期.简单 ...

  5. React笔记_(7)_react路由

    路由 路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程. 路由器当然是作为一个转发设备出现的,主要是转发数据包来实现网络互联. 那么react的路由到底指的是什么呢? 举个 ...

  6. React笔记_(1)_react概述

    React概述   React是一种很好的前端技术. 它将应用打散成独立的小模块,然后进行组装,完成开发. react远比angularjs难学的多. react依赖的如webpack等各种工具得先学 ...

  7. 运维开发笔记整理-Django模型语法

    运维开发笔记整理-Django模型语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.模型基本概念 1>.什么是模型 模型是你的数据唯一的,权威的信息源.它包含你所存储数 ...

  8. 《DOM Scripting》学习笔记-——第二章 js语法

    <Dom Scripting>学习笔记 第二章 Javascript语法 本章内容: 1.语句. 2.变量和数组. 3.运算符. 4.条件语句和循环语句. 5.函数和对象. 语句(stat ...

  9. 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_发布者策略控制

    在 读经典——<CLR via C#>(Jeffrey Richter著) 笔记_高级管理控制(配置)中,是由程序集的发布者将程序集的一个新版本发送给管理员,后者安装程序集,并手动编辑应用 ...

随机推荐

  1. eclipse中tomcat能正常启动,但是浏览器访问不了tomcat首页

    在eclipse中新建tomcat7,完成后tomcat能够正常启动,但是浏览器问题localhost:8080访问不了. 解决方法如下: 双击eclipse中服务器中的tomcat 出现tomcat ...

  2. 安装nodejs+ionic+cordova环境心得

    1.安装node-v0.10.38-x64.msi版本(从nodejs中下载最稳定版本,最后安装ionic安不上,然后又安装node-v0.10.38-x64.msi,再安装ionicok了.不知道是 ...

  3. linux 文件目录

  4. 在Xcode6.1.1模拟器中点击UITextView不出现软键盘?

    使用Xcode6.1.1做一个小项目时,在storyboard中添加了一个UITextField,使用模拟器运行后,点击UITextField出现光标,也可以从外接键盘上输入文字,但是就是不出现软键盘 ...

  5. python_中文乱码问题

    1. 编码和解码的概念:    编码是将源对象内容按照一种标准转换为一种标准格式内容.    解码是和编码对应的,它使用和编码相同的标准将编码内容还原为最初的对象内容. 2. python中的编码和解 ...

  6. [QT]抄—影像显示实验

    QtCreator新建一个Qt Application,命名为ImageView 在项目文件夹下添加gdal库,统一放在ImageView\gdal目录下. 右键单击项目,选择添加库命令,添加gdal ...

  7. configure: error: C++ compiler cannot create executables

    今天装虚拟机LNMP环境 安装报错:configure: error: C++ compiler cannot create executables 这是因为 gcc 组件不完整,执行安装 yum i ...

  8. C#处理JSON数据

    每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...

  9. LinkedHashMap 和 LRU算法实现

    个人觉得LinkedHashMap 存在的意义就是为了实现 LRU 算法. public class LinkedHashMap<K,V> extends HashMap<K,V&g ...

  10. PostgreSQL Replication之第十章 配置Slony(6)

    10.6 执行故障切换 一旦您学会了如何复制表并将它们添加到集合中,是时候学习故障转移了.基本上,我们可以在两个两种类型的故障转移之间做出区分: • 计划内故障转移 • 计划外故障转移和崩溃 在本节, ...