摘要:點(diǎn)燃引擎這是一個(gè)組件實(shí)現(xiàn)組件可交互所需的流程,輸出虛擬,虛擬轉(zhuǎn)為,再在上注冊(cè)事件,事件觸發(fā)修改數(shù)據(jù),在每次調(diào)用方法時(shí),會(huì)自動(dòng)執(zhí)行方法來(lái)更新虛擬,如果組件已經(jīng)被渲染,那么還會(huì)更新到中去。
Part one - setState點(diǎn)燃引擎
這是一個(gè)React組件實(shí)現(xiàn)組件可交互所需的流程,render()輸出虛擬DOM,虛擬DOM轉(zhuǎn)為DOM,再在DOM上注冊(cè)事件,事件觸發(fā)setState()修改數(shù)據(jù),在每次調(diào)用setState方法時(shí),React會(huì)自動(dòng)執(zhí)行render方法來(lái)更新虛擬DOM,如果組件已經(jīng)被渲染,那么還會(huì)更新到DOM中去。?這個(gè)過(guò)程,setState就像一個(gè)點(diǎn)燃引擎的打火石,發(fā)動(dòng)了React核心的調(diào)度層,然后直至渲染層的改變。
Part two - setState是異步的剛接觸React的同學(xué),對(duì)React的setState的使用偶爾會(huì)有一些偏頗,出現(xiàn)一些意料之外的情況。
比如:
onClickForReset=()=>{ this.setState({value: []}); // 此刻立馬取this.state做一些同步操作 console.log(this.state.value); }
或者是
increateCount(){ this.setState({count: this.state.count + 1}); this.setState({count: this.state.count + 1}); this.setState({count: this.state.count + 1}); }
我們可以看一個(gè)現(xiàn)在的例子:
https://codesandbox.io/s/qqy9n5o2m9
setState比較熟練的同學(xué)可以跳過(guò)這一段代碼,但是有些剛學(xué)會(huì)使用React的同學(xué)經(jīng)常會(huì)犯這個(gè)錯(cuò)誤,一開始我只能粗暴地說(shuō):
setState是異步的,不會(huì)立即改變state的值。
多次setState調(diào)用生成的效果會(huì)合并。
第二個(gè)參數(shù)可以是一個(gè)回調(diào)函數(shù)。
setState可以接受一個(gè)函數(shù)(例子改動(dòng))
后來(lái)我逐漸也在想下面這兩個(gè)問(wèn)題,現(xiàn)在這篇文章試圖盡量弄清的兩件事:
為什么要把setState設(shè)計(jì)成異步的,緣由是什么,解決了什么問(wèn)題,有什么好處?
如何實(shí)現(xiàn)異步的setState,整體原理是怎樣的,有沒(méi)有什么特殊的騷操作?
我們可以自己也想一想,下面留給大家一片空白區(qū)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/96075.html
摘要:以上實(shí)現(xiàn)了最簡(jiǎn)單的一個(gè)測(cè)試代碼當(dāng)然,這不能算是一個(gè),目前僅僅實(shí)現(xiàn)了根據(jù)狀態(tài)調(diào)用不同的回調(diào)函數(shù)。靜態(tài)函數(shù)接下來(lái)是的各種靜態(tài)函數(shù)每一個(gè)都執(zhí)行完畢后返回總結(jié)現(xiàn)在,一個(gè)完整的對(duì)象就完成了。 前言 說(shuō)到 ES6,Promise 是繞不過(guò)的問(wèn)題;如果說(shuō) ES6 的 Class 是基于 Javascript 原型繼承的封裝,那么 Promise 則是對(duì) callback 回調(diào)機(jī)制的改進(jìn)。這篇文章,不...
摘要:前端篇收集的前端面試題和答案前端開發(fā)面試題史上最全的前端面試題匯總及答案前端工程師手冊(cè)協(xié)議工作原理協(xié)議運(yùn)行機(jī)制的概述協(xié)議篇原理原理解析的工作原理與的區(qū)別理解后端篇年的面試總結(jié)垃圾回收機(jī)制面向?qū)ο笤O(shè)計(jì)淺談?wù)f清楚是什么和的區(qū)別索引原理及慢查 前端篇 收集的前端面試題和答案 前端開發(fā)面試題 史上最全的web前端面試題匯總及答案 前端工程師手冊(cè) HTTP協(xié)議:工作原理 SSL/TLS協(xié)議運(yùn)行...
摘要:序列文章從項(xiàng)目中由淺入深的學(xué)習(xí)微信小程序和快應(yīng)用從項(xiàng)目中由淺入深的學(xué)習(xí)從項(xiàng)目中由淺入深的學(xué)習(xí)前言的出現(xiàn)前端已經(jīng)可以用一把梭從前端寫到后臺(tái)。 showImg(https://segmentfault.com/img/bVbrRI5?w=1920&h=1080); 序列文章 從項(xiàng)目中由淺入深的學(xué)習(xí)vue,微信小程序和快應(yīng)用 (1)從項(xiàng)目中由淺入深的學(xué)習(xí)react (2)從項(xiàng)目中由淺入深的學(xué)...
摘要:序列文章從項(xiàng)目中由淺入深的學(xué)習(xí)微信小程序和快應(yīng)用從項(xiàng)目中由淺入深的學(xué)習(xí)前言為什么會(huì)有大家有沒(méi)想過(guò)這個(gè)問(wèn)題原因是是弱類型編程語(yǔ)言也就是申明變量類型可以任意變換。是的超集,也相當(dāng)于預(yù)處理器本文通過(guò)一個(gè)項(xiàng)目來(lái)讓你快速上手。 showImg(https://segmentfault.com/img/bVbruJw?w=1024&h=768); 序列文章 從項(xiàng)目中由淺入深的學(xué)習(xí)vue,微信小程序...
閱讀 2055·2023-04-25 15:11
閱讀 3540·2021-09-23 11:57
閱讀 1393·2021-07-26 23:38
閱讀 1331·2019-08-30 15:54
閱讀 649·2019-08-30 15:53
閱讀 3259·2019-08-26 13:36
閱讀 1001·2019-08-26 12:01
閱讀 2877·2019-08-23 16:21