代碼解析React中setState同步和異步問題
React起源于Facebook的內(nèi)部項目。React的出現(xiàn)是革命性的創(chuàng)新,React的是一個顛覆式的前端框架。在React官方這樣介紹的它:一個聲明式、高效、靈活的、創(chuàng)建用戶界面的JavaScript庫,即使React的主要作用是構(gòu)建UI,但是項目的逐漸成長已經(jīng)使得react成為前后端通吃的WebApp解決方案。
angular中用的是watcher對象,vue是觀察者模式,react就是state了,他們各有各的特點(diǎn),沒有好壞之分,只有需求不同而選擇不同。
React的官方網(wǎng)址:https://reactjs.org/GitHub
地址為:https://github.com/facebook/react
1.在React中,由React控制的事件處理函數(shù),如onClick, onChange等,setState是異步的
import React, { Component } from 'react';
export default class Input extends Component {
constructor(props) {
super(props);
this.state={
name: 'hello'
}
}
_onChange(e) {
this.setState({
name:' world'
})
console.log(this.state.name); //hello
}
render () {
return (
<div className='cp'>
<input className='cp-input' value={this.state.name} onChange={this._onChange.bind(this)} type="text"/>
</div>
);
}
}
2.在原生JS監(jiān)聽的事件中,如addEventListener, setState是同步的
import React, { Component } from 'react';
export default class Input extends Component {
constructor(props) {
super(props);
this.state={
name: 'hello'
}
}
_onChange(e) {
// do something
}
componentDidMount() {
let input = document.querySelector('.cp-input');
input.addEventListener('click', ()=>{
this.setState({
name:' world'
})
console.log(this.state.name); //world
})
}
render () {
return (
<div className='cp'>
<input className='cp-input' value={this.state.name} onChange={this._onChange.bind(this)} type="text"/>
</div>
);
}
}
3.在setTimeout中,setStatet是同步的
import React, { Component } from 'react';
export default class Input extends Component {
constructor(props) {
super(props);
this.state={
name: 'hello'
}
}
_onChange(e) {
// do something
}
componentDidMount() {
setTimeout(()=>{
this.setState({
name:' world'
})
console.log(this.state.name); //world
}, 1000)
}
render () {
return (
<div className='cp'>
<input className='cp-input' value={this.state.name} onChange={this._onChange.bind(this)} type="text"/>
</div>
);
}
}
以上就是解析React中setState同步和異步代碼詳解的詳細(xì)內(nèi)容,更多關(guān)于React setState同步和異步的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
React SSR服務(wù)端渲染的實(shí)現(xiàn)示例
本文主要介紹了實(shí)現(xiàn)React服務(wù)端渲染,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
React項目動態(tài)設(shè)置title標(biāo)題的方法示例
這篇文章主要介紹了React項目動態(tài)設(shè)置title標(biāo)題的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09
react實(shí)現(xiàn)瀏覽器自動刷新的示例代碼
這篇文章主要介紹了react實(shí)現(xiàn)瀏覽器自動刷新的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

