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. NSDate如何获取一个月后的日期

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateCo ...

  2. 深度实践KVM笔记

    深度实践KVM笔记 libvirt(virt-install,API,服务,virsh)->qemu(qemu-kvm进程,qemu-img)->KVM虚拟机->kvm.ko 内核模 ...

  3. 最近在研究电台类app,分享2个源码大家一起讨论

    好像去年有一阵,电台类的app特别火爆,喜马拉雅和蜻蜓FM互相还撕逼.听老罗,听好好说话,都得在电台app里,所以我想研究研究这些app.我没那么多资源,只好从app的开发架构方面去研究. 我看api ...

  4. 端口转发后执行putty连接------------------》VirtualBox+ubuntu_server

    login as: fleam fleam@127.0.0.1's password: Welcome to Ubuntu LTS (GNU/Linux --generic i686) * Docum ...

  5. Linux 中的零拷贝技术,第 2 部分

    技术实现 本系列由两篇文章组成,介绍了当前用于 Linux 操作系统上的几种零拷贝技术,简单描述了各种零拷贝技术的实现,以及它们的特点和适用场景.第一部分主要介绍了一些零拷贝技术的相关背景知识,简要概 ...

  6. 阿里云数据库实例的一个db被开发人员删除了 如何恢复

    1没有 逻辑备份的话. 如下操作即可 可以将那个临时实例的需要导的db用逻辑备份出来恢复到主实例就行了 好多朋友都在问,RDS中把数据恢复到7天内任意时间点的功能在哪里啊? 其实挺简单的,只需要五步操 ...

  7. [NetTopologySuite](2)任意多边形求交

    任意多边形求交: private void btnPolygon_Click(object sender, EventArgs e) { , , , , , , , , , , , , , }; , ...

  8. Java多例设计模式

    class TrafficLight{ private String lightType; private static final TrafficLight GREENLIGHT = new Tra ...

  9. Java 杨辉三角的简单实现

    package com.lf.trianglenumber; public class Test { public static void main(String[] args) { // 打印的行数 ...

  10. Oracle RAC inventory.xml损坏后如何修复

    不建议直接修改该文件 1.从其它节点拷贝一份 2.使用runInstaller工具(这个工具位于<GI_HOME>/oui/bin路径下)重建inventory.xml文件 步骤1:添加G ...