• React笔记_(3)_react语法2


    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 )。这样就可以确保在任何时间总是拿到正确的实例。

    举个例子:

    一个文本框输入内容,点击按钮获取内容。

     1 'use strict';
     2 import React, { Component } from 'react';
     3 import ReactDOM from 'react-dom';
     4 
     5 class InputContent extends Component {
     6 
     7     getInputValue() {
     8         var inputValue = this.refs.myInput.value;
     9         alert(inputValue);
    10     }
    11 
    12     render() {
    13 
    14         return (
    15             <p>
    16                 <input type="text" ref="myInput" />
    17                 <button type="button" onClick={this.getInputValue.bind(this)}>get input value</button>
    18             </p>
    19         );
    20 
    21     }
    22 
    23 }
    24 
    25 ReactDOM.render(<InputContent />,
    26     document.getElementById("app")
    27 );

    了解到了state和refs的用法,做一个简单的小功能吧。

    一个文本框和一组数据,在文本框中输入内容,对这组数据进行过滤。

     1 'use strict';
     2 import React,{ Component } from 'react';
     3 import ReactDOM from 'react-dom';
     4 //小部件,渲染为ul列表
     5 class Items extends Component {
     6     render(){
     7         var arrLi = [];
     8         for(let i=0;i<this.props.info.length;i++){
     9         //注意,这里可不是拼接字符串!
    10         arrLi.push(<li key={i}>{this.props.info[i]}</li>);
    11         }
    12          return (<ul>{arrLi} </ul>);
    13     }
    14 }
    15 //大部件
    16 class Box extends Component {
    17     constructor(props){
    18         super(props);
    19         this.state = {
    20             list:this.props.sourceData
    21         }
    22      }
    23     checkSth(){  
    24          var arr = [];  
    25          //获取文本框信息    
    26          var inputValue = this.refs.myInput.value;  
    27         //获取props信息  
    28         var sourceData = this.props.sourceData;  
    29         //筛选数据
    30         for(let i=0;i<sourceData.length;i++){
    31             if(sourceData[i].indexOf(inputValue)!=-1){
    32                 arr.push(sourceData[i]);
    33             }
    34         }
    35      //更新状态机
    36         this.setState({list:arr});
    37     }
    38     render(){
    39          return (
    40              <div>
    41                 <input type="text" ref="myInput" onKeyUp={this.checkSth.bind(this)}/>
    42                 <Items info={this.state.list} />
    43             </div>
    44            );
    45     }
    46 }
    47 var data = ['jackson','milly','john smith','mike','jenny'];
    48 ReactDOM.render(
    49 <Box sourceData={data} />,
    50 document.getElementById('app')
    51 );

    就这么多吧。

    感觉一会不用,就渐渐的忘记了哇。

    还是老套路:

    点此下载说明和代码



    如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!


    作者:风来风往风伤
    出处:http://www.cnblogs.com/amwuau/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

     
  • 相关阅读:
    jsp生成xml文件示例
    jsp分页显示
    Spring AOP学习笔记
    让leeon不再眷念马桶——书评《精通正则表达式》
    用JSP实现上传文件的两种方法
    oracle sql性能优化
    Iron Speed Designer 4.2.2学习
    再议《JavaScript代码优化一例》
    有关《大道至简》的几点讨论~
    有源则至清——我读《移山之道》
  • 原文地址:https://www.cnblogs.com/amwuau/p/6136476.html
Copyright © 2020-2023  润新知