第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

setState中的神秘參數(shù),為什么會(huì)起作用?

setState中的神秘參數(shù),為什么會(huì)起作用?

慕運(yùn)維8079593 2023-04-27 15:11:52
完成 TypeScript + React 課程并構(gòu)建待辦事項(xiàng)列表。不過,我的問題是關(guān)于反應(yīng)功能。在添加 Todo 的處理程序中,在 setState 中聲明了這個(gè)函數(shù)const App: React.FC= () => {  const [todos, setTodos] = useState<Todo[]>([])  const todoAddHandler = (text: string) => {    // when its called.... where does the prevTodos state come from?    setTodos(prevTodos => [...prevTodos,       {id: Math.random().toString(), text: text}])  }  return (    <div className="App">      <NewTodo onAddTodo={todoAddHandler}/>      <TodoList items={todos}></TodoList>    </div>  );}export default App;當(dāng)在setState中調(diào)用該函數(shù)時(shí),它會(huì)自動(dòng)調(diào)用當(dāng)前狀態(tài)。這只是 setState 的一個(gè)特性嗎?如果你在其中聲明一個(gè)函數(shù),參數(shù)將始終是函數(shù)被調(diào)用時(shí)的當(dāng)前狀態(tài)?當(dāng)這個(gè)參數(shù)剛剛...工作時(shí)非常困惑。:#
查看完整描述

2 回答

?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊

這只是 setState 的一個(gè)特性嗎?- 是的

useState是一種使用與 this.state 在類中提供的功能完全相同的功能的新方法

這意味著它的核心仍然依賴于舊this.setState({})功能。如果你記得使用this.setState(),你就會(huì)知道它有一個(gè)可用的回調(diào)函數(shù),可以這樣使用:

this.setState((currentState)?=>?{?/*?do?something?with?current?state?*/?})

現(xiàn)在已經(jīng)轉(zhuǎn)移到useStatehook 的第二個(gè)解構(gòu)項(xiàng)[item, setItem]?setItem,因此它具有相同的功能:

setItem((currentState) => { /* do something with current state */ }


查看完整回答
反對(duì) 回復(fù) 2023-04-27
?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊

通過鉤子,React 包含每個(gè)狀態(tài)名稱到其當(dāng)前值的內(nèi)部映射。和


const [todos, setTodos] = useState<Todo[]>([])

每當(dāng)setTodos調(diào)用并todos再次設(shè)置狀態(tài)時(shí),React 都會(huì)將內(nèi)部狀態(tài)更新為todos新值。useState調(diào)用時(shí),它還將返回變量的當(dāng)前內(nèi)部狀態(tài)。


你可以這樣想:


// React internals

let internalState;

const setState = (param) => {

  if (typeof param !== 'function') {

    internalState = param;

  } else {

    param(internalState);

  }

};

const useState = initialValue => {

  internalState ??= initialValue;

  return [internalState, setState];

}

然后,當(dāng)您調(diào)用狀態(tài)設(shè)置器時(shí),您可以向它傳遞一個(gè)普通值(更新internalState),或者您可以向它傳遞一個(gè)函數(shù),該函數(shù)在被調(diào)用時(shí)將當(dāng)前內(nèi)部狀態(tài)作為第一個(gè)參數(shù)傳遞。


請(qǐng)注意,該prevTodos參數(shù)將包含當(dāng)前狀態(tài),包括中間更新。例如,如果您setTodos在重新渲染發(fā)生之前同步調(diào)用兩次,則您需要第二次使用回調(diào)形式才能“看到”第一次調(diào)用setTodos.


查看完整回答
反對(duì) 回復(fù) 2023-04-27
  • 2 回答
  • 0 關(guān)注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)