亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

react初探(一)之JSX、狀態(state)管理、條件渲染、事件處理

標簽:
React.JS

前言:

最近收到组长通知我们项目组后面新开的项目准备统一技术栈为react,目前我的情况是三大框架只会angular和Vue。在实际项目中只使用过一次angular5,其余项目都是使用Vue写的。写篇博客记录一下一些项目中经常使用的技巧在Vue和react中不同的实现方法。

 使用JSX指定属性值和嵌入表达式:

(1)指定变量作为属性值

<div title={type}>type</div>

Vue中的写法:

<div :title="type">type</div>  // vue写法

(2)指定字符串作为属性值

<div title="我是title的值"}>type</div>

(3)动态绑定class

<div className={hasClass ? 'class' : ''}>class</div><div className={hasClass && 'class'}>class</div>

Vue中的写法:

<div :class="{'class': hasClass}"></div>   // Vue写法

(4)JSX中嵌入表达式

<div>{type}</div>

Vue中的写法:

<div>{{type}}</div>  // Vue写法

注意:react的 { } 中的变量是非常灵活的,可以为原始值、React 元素,或者函数。

状态(state)管理:

(1)定义变量

类似于Vue在data定义组件中的变量,react可以在constructor函数初试化定义组件中的变量。

复制代码

class State  extends Component {
    constructor(props){
      super(props);      this.state = {
          name: '你假装没察觉'
      }
    };
    render() {        return (            <div>
                {this.state.name}            </div>        )
    }
}

复制代码

 

在render函数中使用this.state就可以访问到在constructor中定义的this.state对象。PS:只能在constructor函数中对this.state对象进行初始化,在其他地方对this.state对象进行初始化都是无效的。

Vue的写法:

复制代码

<div>{{name}}</div>data() {    return {
        name: '你假装没察觉'
    };
}  // Vue的写法

复制代码

 

(2)改变变量的值

在react中如果要改变state中定义的变量不能直接使用 ' = '的方式直接赋值,需要使用setState函数。

this.setState({
    name: 'yjj'})

Vue中的写法:

this.name = 'yjj'   // Vue中的写法

注意:state的更新可能是异步的,如果存在 num = num + 10 这种情况,最好使用下面这种方式:

this.setState((prevState,props) => ({
     num: prevState.num+10}))

条件渲染:

(1)与运算符:

利用js的 '&&' 运算符当第一项为false时,第二项不会加载进来的机制。

复制代码

render() {
    const isShow = false
    return(        <div>
            {isShow&&<div>isShow为true时我才显示</div>}
        </div>    )
}

复制代码

(2) 三目运算符

复制代码

render() {
    const isShow = true
    return(        <div>
            {isShow?<div>isShow为true时我才显示</div>: <div>isShow为fasle时我才显示</div>}        </div>    )
}

复制代码

 Vue中的写法:

<div v-show="isShow">isShow为true时我才显示</div>  或者<div v-if="isShow">isShow为true时我才显示</div>// Vue中的写法

 事件处理:

 (1)在constructor函数中使用bind将类的方法绑定上this。PS:这种方法太繁琐,需要将每个处理事件的方法都绑定上this

复制代码

class Event extends Component {
    constructor(props) {
        super(props)        this.state = {
            num: 10
        }        this.add = this.add.bind(this)
    };
    add() {        this.setState((prevState) => ({
            num: prevState.num+10
        }))
    };
    render() {        return(            <div>
                <div onClick={this.add}>num加10</div>
                <div>当前num={this.state.num}</div>
            </div>        )
    }
}

复制代码

(2)在回调函数中使用箭头函数。PS:需要多写一层箭头函数嵌套

<div onClick={(e)=>this.add(10,e)}>num加10</div>  // 10为传递进去的参数

(3)在onClick定义处直接使用bind绑定this。PS:需要多写一个bind

<div onClick={this.add.bind(this,10,e)}>num加10</div>  // 10为传递进去的参数

(4)定义方法时使用箭头函数。PS:当需要传递参数的时候还是只能在外面嵌套一层箭头函数

复制代码

add = () => {
    this.setState((prevState) => ({
        num: prevState.num+10
    }))
};
render() {
    return(        <div>
            <div onClick={this.add}>num加10</div>
            <div>当前num={this.state.num}</div>
        </div>
    )
}

复制代码

 PS:在react中阻止默认行为不能像Vue中直接使用return false,只能使用e.preventDefault()

 事件处理在Vue中的写法:

<div @click="add(10)">num加10</div>  // Vue中的写法,10为传递进去的参数

总结: 

很多Vue项目中经常使用的技巧在react中都能找到类似的方法实现,区别只是在于写法不同而已。刚刚接触react不久,感觉很多地方都用着不是很顺手,总觉得还是Vue的写法要简单一些,等后面用react写几个项目再来总结一下Vue和react在实际项目中的差异。

原文出处

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消