React学习打卡Day2

1.事件绑定,在标签内用onClick等方式实现事件绑定
        1)使用箭头函数实现,在语句最后不需要加(),react事件系统程序在执行时会自动添加,如果处理逻辑过多,不推荐这种写法
        2)使用函数调用实现,函数调用使用this,在语句最后不需要加()
        3)使用函数调用实现,外部函数使用箭头函数构造,在语句最后不需要加()
        4)使用箭头函数实现,外部函数构造方式随意,但在箭头函数内部调用时函数需加(),可以在内部调用多个函数,比较推荐
        推荐使用第四种的变形,利于传参,<button onClick={()=>this.handleClick4()}></button>

import React, { PureComponent } from 'react'

export default class App extends PureComponent {
    a = 100;
    render() {
        return (
            <div>
                <input></input>
                <button onMouseOver={()=>{
                    console.log("click1","如果处理逻辑过多,不推荐这种写法",this.a);
                }}>add1</button>
                <button onClick={this.handleClick2.bind(this)}>add2</button>//这里必须使用bind,因为call和apply会自动添加括号,无法触发react事件系统机制
                <button onClick={this.handleClick3}>add3</button>
                <button onClick={()=>{
                    this.handleClick4();
                }}>add4</button>
            </div>
        )
    }
    handleClick2(){
        console.log("click2",this);
    }
    handleClick3 = ()=>{
        console.log("click3",this.a);
    }
    handleClick4(){
        console.log("click4",this.a);
    }
}
/*
    call,改变this,自动执行函数
    apply,改变this指向,自动执行函数
    bind,改变this指向,不自动执行函数,手动加()执行函数
*/
var obj1 = {
    name:"obj1",
    getName(){
        console.log(this.name)
    }
}
var obj2 = {
    name:"obj2",
    getName(){
        console.log(this.name)
    }
}
obj1.getName.call(obj2);
obj2.getName.bind(obj1)();

2.call,apply,bind,在标签内的事件绑定只能用bind绑定函数,因为bind不会自动执行
        call,改变this,自动执行函数,系统无法再加括号
        apply,改变this指向,自动执行函数,系统无法再加括号
        bind,改变this指向,不自动执行函数,手动加()执行函数,系统可以自动加

3.ref的两种方式
        1)标签内使用ref=“任意名字”,事件中使用this.refs.任意名字,获取标签对象
        2)在外部定义myref = React.createRef(),标签内使用ref={this.myref},事件中使用this.myref.current,获取标签对象,该模式可以在严格模式下使用

import React, { PureComponent } from 'react'

export default class App extends PureComponent {
    myref = React.createRef();
    render() {
        return (
            <div>
                {/* <input ref="mytext"></input> */}
                {/* <button onClick={()=>{
                    console.log("click1",this.refs.mytext.value); */}
                {/* }}>add1</button> */}
                <input ref={this.myref}></input>
                <button onClick={()=>{
                    console.log("click1",this.myref.current.value);
                }}>add1</button>
            </div>
)}}

4.状态state
        1)在react中,不允许用户直接修改DOM状态,通过代理修改,采用state实现
        1)在react中,使用state来表示对象的属性,采用键值对的形式存放
        2)采用this.state.对象名来获取对象的值,采用this.setState({对象名:新值)}来动态更新值

import React, { PureComponent } from 'react'

export default class App extends PureComponent {
    state={
        mytext:"收藏",
        myShow:true
    }
    render() {
        //var text = "收藏"
        return (
            <div>
                <h1>欢迎来到react开发</h1>
                <button onClick={()=>{
                    //this.state.mytext = "取消收藏"//不要直接修改状态
                    this.setState({
                        //mytext:"取消收藏"
                        myShow:!this.state.myShow
                    })//间接修改状态
                    if(this.state.myShow){
                        console.log("收藏的逻辑");
                    }else{
                        console.log("取消收藏的逻辑");
                    }
                }}>{this.state.myShow?'收藏':'取消收藏'}</button>
            </div>
        )}}

 5.循环渲染和key值的使用
        循环旋绕:使用js中的map方式,但是要注意写法规范
        key值使用:
        1) 为了列表的复用和重排,设置key值,提高性能
        2)理想key,设置为item.id
        3)如果不涉及列表的增加删除重排,设置成索引也是安全的

import React, { PureComponent } from 'react'

export default class App extends PureComponent {
    /*state={
        list:[{
            id:1,
            text:"1111"
        },{
            id:2,
            text:"2222"
        },{
            id:3,
            text:"3333"
        }]
    }*/
    state={
        list:["1111","2222","3333"]
    };
    render() {
        return (
            <div>
                <ul>
                    {/* {
                        this.state.list.map(item=>
                        <li key={item.id}>{item.text}</li>)} */}
                    {
                        this.state.list.map((item,index)=>
                        <li key={index}>{item}</li>)
                    }
                </ul>
            </div>
        )}}
/*
    为了列表的复用和重排,设置key值,提高性能
    理想key,设置为item.id
    如果不涉及列表的增加删除重排,设置成索引也是安全的
*/
/*
原生js - map
*/
var list =["aa","bb","cc"];
var newlist = list.map(item=>`<li>${item}</li>`);
console.log(newlist.join(""));


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值