摘要:而不是在方法中在通過來獲取使用回調(diào)函數(shù)方法接收一個作為回調(diào)函數(shù)。這樣子直接輸出,回調(diào)函數(shù),對比如果默認為輸入的結(jié)果是和渲染無關(guān)的狀態(tài)盡量不要放在中來管理通常中只來管理和渲染有關(guān)的狀態(tài),從而保證改變的狀態(tài)都是和渲染有關(guān)的狀態(tài)。
原文: https://medium.com/@mweststra...
作者: Michel Weststrate
這篇文章原標題是3 Reasons why I stopped using React.setState,但是我對原文作者提出的論點不是很感冒,但是作者提出的三點對React新手來說是很容易忽略的地方,所以我在這里只提出部分內(nèi)容,而且把標題改為使用React.setState需要注意的三點。
正文對React新手來說,使用setState是一件很復雜的事情。即使是熟練的React開發(fā),也很有可能因為React的一些機制而產(chǎn)生一些bug,比如下面這個例子:
文檔中也說明了當使用setState的時候,需要注意什么問題:
注意:
絕對不要 直接改變this.state,因為之后調(diào)用setState()可能會替換掉你做的改變。把this.state當做是不可變的。setState()不會立刻改變this.state,而是創(chuàng)建一個即將處理的state轉(zhuǎn)變。在調(diào)用該方法之后訪問this.state可能會返回現(xiàn)有的值。
對setState的調(diào)用沒有任何同步性的保證,并且調(diào)用可能會為了性能收益批量執(zhí)行。
setState()將總是觸發(fā)一次重繪,除非在shouldComponentUpdate()中實現(xiàn)了條件渲染邏輯。如果可變對象被使用了,但又不能在shouldComponentUpdate()中實現(xiàn)這種邏輯,僅在新state和之前的state存在差異的時候調(diào)用setState()可以避免不必要的重新渲染。
總結(jié)出來,當使用setState的時候,有三個問題需要注意:
1. setState是異步的(譯者注:不保證同步的)很多開發(fā)剛開始沒有注意到setState是異步的。如果你修改一些state,然后直接查看它,你會看到之前的state。這是setState中最容易出錯的地方。 setState這個詞看起來并不像是異步的,所以如果你不假思索的用它,可能會造成bugs。下面這個例子很好的展示了這個問題:
class Select extends React.Component { constructor(props, context) { super(props, context) this.state = { selection: props.values[0] }; } render() { return (
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/81439.html
摘要:下面來逐步的解析圖里的流程。一將事務放進隊列中這里的可以傳也可以傳它會產(chǎn)生新的以一種的方式跟舊的進行合并。如果當前不在更新過程的話,則執(zhí)行更新事務。以上即為的實現(xiàn)過程,最后還是用一個流程圖在做一個總結(jié)吧參考文檔 前言 學過react的人都知道,setState在react里是一個很重要的方法,使用它可以更新我們數(shù)據(jù)的狀態(tài),本篇文章從簡單使用到深入到setState的內(nèi)部,全方位為你揭開...
摘要:今天我們就來解讀一下的源碼。比較有意思,將定時器以方式提供出來,并且提供了方法。實現(xiàn)方式是,在組件內(nèi)部維護一個定時器,實現(xiàn)了組件更新銷毀時的計時器更新銷毀操作,可以認為這種定時器的生命周期綁定了組件的生命周期,不用擔心銷毀和更新的問題。 1. 引言 React PowerPlug 是利用 render props 進行更好狀態(tài)管理的工具庫。 React 項目中,一般一個文件就是一個類,...
摘要:要實施這個方案,最大問題就是接口約定。討論地址是精讀做了什么如果你想?yún)⑴c討論,請點擊這里,每周都有新的主題,周末或周一發(fā)布。前端精讀幫你篩選靠譜的內(nèi)容。 1 引言 setState 是 React 框架最常用的命令,它是用來更新狀態(tài)的,這也是 React 框架劃時代的功能。 但是 setState 函數(shù)是 react 包導出的,他們又是如何與 react-dom react-nativ...
摘要:區(qū)別在于傳入一個更新函數(shù),就可以訪問當前狀態(tài)值。后面兩次會同步更新,分別輸出,很顯然,我們可以將次簡單規(guī)成兩類是一類中的又是一類,因為這兩次在不同的調(diào)用棧中執(zhí)行。 寫業(yè)務代碼的時候 需要經(jīng)常用到setState, 前幾天review代碼的時候, 又想了一下這個API, 發(fā)現(xiàn)對它的了解不是很清楚, 僅僅是 setState 是異步的, 周六在家參考了一些資料,簡單整理了下,寫的比較簡單...
摘要:新的值回調(diào)函數(shù)。官方注解是給組件做個標記需要重新渲染,并且將可選的回調(diào)函數(shù)添加到函數(shù)列表中,這些函數(shù)將在重新渲染的時候執(zhí)行。一共做了兩件事一是通過執(zhí)行方法來更新組件二是若方法傳入了回調(diào)函數(shù)則將回調(diào)函數(shù)存入隊列。 Q1 setState改變狀態(tài)之后,不會立即更新state值。所以,如果改變state值,react是什么時候進行組件的更新呢?setState()到底做了一些什么呢? A1 ...
閱讀 2059·2021-11-15 11:39
閱讀 3239·2021-10-09 09:41
閱讀 1505·2019-08-30 14:20
閱讀 3279·2019-08-30 13:53
閱讀 3337·2019-08-29 16:32
閱讀 3405·2019-08-29 11:20
閱讀 3034·2019-08-26 13:53
閱讀 788·2019-08-26 12:18