zoukankan      html  css  js  c++  java
  • react绑定this三种方式

    在pages下新增this.js文件并修改route/index.js如下

    this.js

    import React from 'react';
    
    export default class This extends React.Component{
        constructor(){
            super();
            this.state = {
                value: ''
            };
    
            this.changeValue1 = this.changeValue1.bind(this);
        }
    
        changeValue1(){
            this.setState({
                value: 'changeValue1'
            });
        }
    
        changeValue2 = () => {
            this.setState({
                value: 'changeValue2'
            });
        };
    
        changeValue3(){
            this.setState({
                value: 'changeValue3'
            });
        }
    
    
        render(){
            return (
                <div>
                    <p onClick={this.changeValue1}>this1</p>
                    <p onClick={this.changeValue2}>this2</p>
                    <p onClick={this.changeValue3.bind(this)}>this3</p>
                    <p>{this.state.value}</p>
                </div>
            )
        }
    }

    route/index.js

    import React from 'react';
    import {Switch, Route} from "react-router-dom";
    
    import Home2 from '../pages/Home2';
    import OnePage from '../pages/OnePage';
    import TwoPage from '../pages/TwoPage';
    import This from '../pages/This';
    
    const Routers = (
        <Switch>
            <Route path="/" exact component={Home2} />
            <Route path="/onePage" component={OnePage} />
            <Route path="/twoPage/:id" component={TwoPage} />
            <Route path="/this" component={This} />
        </Switch>
    );
    
    export default Routers

    第一种绑定this方式是bind(this) 

    第二种使用ES6的箭头函数

    第三种方式好像和第一种一样?其实如果要加参数的话我更推荐第三种,因为:

    <p onClick={this.changeValue3.bind(this, 666)}>this3</p>  
    changeValue3(id){
        this.setState({
            value: 'changeValue3'
        });
        this.props.history.push(`/twoPage/${id}`)
    }
    添加参数id为666并补上上一篇提到的js带参数跳转路由的方法;

  • 相关阅读:
    .NET 低版本调用高版本DLL问题
    防止SQL注入攻击
    Vue集成vue-pdf进行pdf预览
    VS2017序列号|Visual Studio 2017 激活码 序列号
    Java 使用word文档模板下载文件(内容为表格)
    接收sql语句的返回值
    ajax返回数据之前的loading等待
    在客户端展示本地图片
    C# 使用cookie实现登录
    C#请求http向网页发送数据,网页接收
  • 原文地址:https://www.cnblogs.com/huangjie2018/p/10690471.html
Copyright © 2011-2022 走看看