1 回答

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
1. 究竟什么時(shí)候需要功能更新?
您可能需要更新組件的任何狀態(tài)。例如,您通過 api 從服務(wù)器獲取用戶,您需要將該用戶存儲(chǔ)在您的組件中。為此,您需要 useState 來存儲(chǔ)該用戶對(duì)象。這是示例:
const [user, setUser] = useState({}); // declaration
let newUser = u; // u is coming from api
setUser(newUser);
1.1。如果 setter 函數(shù)接收到一個(gè)函數(shù),它的參數(shù)將始終是之前的狀態(tài)?
是的。類組件中使用了 setState 之類的 setter 函數(shù)。這是僅更新狀態(tài)字段的示例:
this.setState({username: 'khabir'});
在這里,您正在使用以前的狀態(tài)更新狀態(tài):
this.setState(prevState =>{
return{
counter : prevState.counter +1
}
})
2.如果我想從子組件更新父狀態(tài),我應(yīng)該如何將設(shè)置器傳遞給子組件-將其包裝在另一個(gè)函數(shù)中作為回調(diào),如此處所述?只是按照這里的建議直接傳遞?
兩個(gè)例子都是一樣的。你可以使用任何人。
3. 如果我可以直接傳遞它并且我正在使用備忘錄,那么是否需要使用這里解釋的 useCallback ?
如果您將任何函數(shù)引用從父組件傳遞給子組件,則會(huì)在每次渲染 Parent 時(shí)創(chuàng)建它,因此 prevProps 和 props 不再相同,即使它們是相同的。
要應(yīng)用備忘錄,我們需要確保函數(shù)引用不會(huì)在每次渲染 Parent 時(shí)不必要地重新創(chuàng)建。這就是使用 useCallback 的原因。請(qǐng)完整閱讀該文章以獲得更好的理解。
4.如果我想在從child更新父狀態(tài)時(shí)使用最新的狀態(tài)數(shù)據(jù),我應(yīng)該怎么做?
您不能直接從子組件更新父狀態(tài),但您可以將函數(shù)引用發(fā)送到子組件并從在父組件上定義(函數(shù))的子組件調(diào)用該函數(shù)。在該函數(shù)體中(在父級(jí)中),您可以更新父組件的狀態(tài)。
4.1。在這種情況下向孩子傳遞回調(diào)有用嗎?
是的,正如我在問題 4 的答案中所說的那樣。
添加回答
舉報(bào)