zoukankan      html  css  js  c++  java
  • React学习(二)-数据绑定和方法使用

    一.定义react数据

    var React = require('react');
    
    class App extends React.Component {
        constructor() {
            super();
            //定义数据
            this.state = {
                text: "hello world"
            };
        }
        render() {
            return <div>{this.state.text}</div>;
        }
    }
    
    export default App;

      在构造函数中,定义数据。在react组件中,数据都是存放在state中。

      注意,在constructor中必须写super()。在es6中,super指代父类的实例。子类在constructor中必须调用super(),因为子类没有this,需要继承父类的this对象,然后在上面进行操作。不调用这个super(),子类就得不到this对象。

      数据定义后,在render()中的模板直接使用{}来把state数据输出。

    二.模板语法

      在html模板中使用{},可以输出值。

    render() {
        return <div>{this.state.text}</div>;
    }

      也可以使用简单的js语法,如三元运算。

    render() {
        return <div>{
            this.state.canShow ? <div>{this.state.text}</div> : null
        }</div>;
    }

    三.修改react数据

      组件中state的值,Component提供了setState方法。

    //实现该生命周期的方法,react底层会自动在对应周期中调用该钩子方法
    componentDidMount() {
        this.setState({
            text: "byebye world"
        });
        //直接赋值,不会重新渲染html。必须调用setState方法才会监听到html是否变化,然后react才再重新渲染。
        //并非直接的双向数据绑定
        //this.state.text = "byebye world";
    }

    四.绑定事件

      在组件中定义方法,然后在render模板中引用。

    handleClick(){
        this.setState({
            canShow: !this.state.canShow
        });
    }
    
    render() {
        return <div>
            <input type="button" value="点击" onClick={this.handleClick.bind(this)} />
        </div>;
    }

      这里需要使用bind的原因是,handleClick中会得不到组件中this的对象。this对象是指向最后调用它的对象,这里最后调用它onclick事件的,是window对象。

      使用bind方法,会将它第一个参数作为该方法的this对象,通过bind方法将组件的this对象传到handleClick方法中。

    onClick = () => {
        this.setState({
            canShow: !this.state.canShow
        });
    }
    
    render() {
        return <div>
            {
                this.state.canShow ? <div>{this.state.text}</div> : null
            }
            <input type="button" value="点击" onClick={this.handleClick} />
        </div>;
    }

      或者使用ES6箭头函数,它可以避开ES5使用this的坑。箭头函数中的this始终指向函数定义时的this,而不是执行时。

    五.贴上代码

    var React = require('react');
    
    class App extends React.Component {
        constructor() {
            super();
            //定义数据
            this.state = {
                text: "hello world",
                canShow: true
            };
        }
    
        //实现该生命周期的方法,react底层会自动在对应周期中调用该钩子方法
        componentDidMount() {
            this.setState({
                text: "byebye world"
            });
            //直接赋值,不会重新渲染html。必须调用setState方法才会监听到html是否变化,然后react才再重新渲染。
            //并非直接的双向数据绑定
            //this.state.text = "byebye world";
        }
    
        handleClick() {
            this.setState({
                canShow: !this.state.canShow
            });
        }
    
        // onClick = () => {
        //     this.setState({
        //         canShow: !this.state.canShow
        //     });
        // }
    
        render() {
            return <div>
                {
                    this.state.canShow ? <div>{this.state.text}</div> : null
                }
                <input type="button" value="点击" onClick={this.handleClick.bind(this)} />
            </div>;
        }
    }
    
    export default App;
  • 相关阅读:
    购物车升级版本
    python购物车-基础版本
    ubuntu制作离线包
    记录:一次数据库被恶意修改配置文件的问题
    kafka监控
    python基础day3
    python基础day1
    openstack部署之Horizon
    openstack部署之创建第一个实例
    openstack部署之neutron
  • 原文地址:https://www.cnblogs.com/shadoll/p/15035383.html
Copyright © 2011-2022 走看看