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. JQuery: JQuery效果(隐藏、显示、切换,滑动,淡入淡出,以及动画)

    JQuery:效果 JQuery效果有很多,包括隐藏.显示.切换,滑动,淡入淡出,以及动画等.隐藏:JQuery hide() 显示:JQuery show() 切换:JQuery toggle() ...

  2. jenkins邮件模板

    步骤 1.在jenkins主目录中新建一个模板文件夹 命名为:email-templates 3.把模板代码放入到模板文件夹  with_results.groovy 4.设置邮件发送模板配置 5.配 ...

  3. php 使用 Memcache 例子

    代码写成后不断的往数据库插入数据,可以发现 当set时:理论上速度变慢,但数据同步 当get时:理论上速度变快,但数据不同步,需要缓存失效后重新请求set方法 <?php $mem = new ...

  4. OC类方法和实例方法中的self区别

    OC类方法和实例方法中的self Objective-C里面既有实例方法也类方法.类方法(Class Method) 有时被称为工厂方法(Factory Method)或者方便方法(Convenien ...

  5. 史上最全的iOS面试题及答案

    迷途的羔羊--专为路痴量身打造的品牌.史上最精准的定位.想迷路都难!闪电更新中...敬请期待,欢迎提意见.下载地址:https://itunes.apple.com/us/app/mi-tu-de-g ...

  6. PetaPoco模糊查询

    like '@0'  是错的,应该换成这样 like @0,原因是petapoco会自动把代码解析成'你好' 标签: Sql command = new Sql();command.Append(&q ...

  7. jqery validate、validate自定义验证方法 + jaery form Demo

    校验规则 required:true  必输字段 remote:"check.php"  使用ajax方法调用check.php验证输入值 email:true  必须输入正确格式 ...

  8. UIlabel多行文字自动换行 (自动折行)

    UIView *footerView = [[UIView alloc]initWithFrame:CGRectMake(, , , )]; UILabel *label = [[UILabel al ...

  9. vmware虚拟机三种网络模式详解_转

    原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 由于L ...

  10. 第二篇 Replication:分发服务器的作用

    本篇文章是SQL Server Replication系列的第二篇,详细内容请参考原文. 分发服务器是SQL Server复制的核心组件.分发服务器控制并执行数据从一个服务器移动到另一个服务器的进程. ...