setState()同步異步
setState()會出現state延遲更新的情況,不要用setTimeout函式呼叫setState來改進,setState是異步的,可以通過呼叫回呼函式來解決,

- 關于setState()是同步還是異步的說法,準確來說,在React內部機制能夠檢測到的地方,setState是異步的;在React檢測不到的地方,比如setInterval,setTimeout里,setState是同步更新的,【setInterval表示按照指定的周期來呼叫函式,一直到clearInter為止,setTimeout表示在指定的毫秒數后呼叫函式】,
換句話說,setState只在合成事件(onClick,onChange)和鉤子函式(鉤子函式一般是在某個框架里面的叫法,是這個框架在生命周期的某個階段觸發的回呼函式,如componentDidMounted),是異步的,在原生事件(非react合成事件,原生自帶的事件監聽addEventListener,或直接用原生js、jq直接document.querySelector().onClick這種系結事件的形式都是原生事件)和setTimeout中是同步的,
當setState接受一個回呼函式時,這個回呼函式會在setState完成以后直接呼叫,這樣在這個回呼函式中就可以獲得最新的state,
回呼函式
回呼函式也稱為高階函式,是將一個函式(實參)作為引數傳遞給另一個函式(通過形參),當我們將一個回呼函式作為引數傳遞給另一個引數的時候,只是定義了這個引數,并沒有在引數中執行函式(主要原因是只傳過去了函式名字,沒有加小括號),這個回呼函式只會在包含它的函式內的某個特定時間點被回呼,


回呼函式是閉包的,因此回呼函式可以訪問包含函式的變數,甚至是全域變數,
回呼函式中如果有this物件,必須要用call或apply的方式來維護this物件,否則this將指向全域window,


沒有維護this時,直接使用回呼函式clientData.setUserName,這個函式會定義window的fullName

使用apply函式,用來在clientData.setUserName內部設定this物件——clientData,
回呼地獄是有很多層級的回呼函式,解決回呼地獄:命名并定義你的函式,然后用函式名作為回呼,而不是定義一個匿名函式;或也可以把代碼劃分為模塊,
select組件的重置
antd的select,要想重置選項框,要把select的value設定成等于state中的一個值,每次onChange的時候,setState這個state等于value,在重置button中設定這個state為undefined【如果是’’,將不會顯示placeholder】
Cookie與Session
Cookie是服務器發送到用戶瀏覽器并保存在本地的一小塊資料,它會在瀏覽器下次向同一服務器再發起請求時被攜帶并發送到服務器上,通常,它用于告知服務端兩個請求是否來自同一瀏覽器,比如保持用戶的登錄狀態,Cookie使基于無狀態的HTTP協議紀錄穩定的狀態資訊成為了可能,
通常,Cookie主要用于紀錄以下三個方面:1.會話狀態管理(用戶登錄狀態、購物車、游戲分數或其他需要紀錄的資訊);2.個性化設定(用戶自定義設定、主題等);3.瀏覽器行為跟蹤(跟蹤分析用戶行為等),
Session 代表著服務器和客戶端一次會話的程序,Session物件存盤特定用戶會話所需的屬性及配置資訊,這樣,當用戶在應用程式的Web頁之間跳轉時,存盤在Session物件中的變數將不會丟失,而是在整個用戶會話中一直存在下去,當客戶端關倍訓話,或Session超時失效時會話結束,
Cookie保存在客戶端(瀏覽器),Session保存在服務器端,
當瀏覽器禁止了Cookie時,保證服務器端判斷用戶是否登錄的方法有:1.每次請求都攜帶一個SessionID的引數,也可以用Post的方式提交,或在請求的地址后面拼接xxx?SessionID=123456…;2.Token機制,Token機制多用于App客戶端和服務器互動的模式,也可以用于Web端做用戶狀態管理,Token是服務端生成的一串字串,作為客戶端進行請求的一個標識,當用戶第一次登陸后,服務器根據提交的用戶資訊生成一個Token,回應時將Token回傳給客戶端,以后客戶端只需要帶上這個Token前來請求資料即可,無需再次登錄驗證,
- post、fetch中的請求網站url,只用寫api后面的東西????
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/250772.html
標籤:其他
下一篇:求問bp神經網路整定pid
