P粉7295188062023-08-18 14:21:45
為鉤子本身定義狀態,而不是鉤子內部的函數。例如:
export const useHero = (initialHero) => { const [hero, setHero] = useState(initialHero); const UpdateHero = (newHero) => { setHero(newHero); }; return { UpdateHero }; }
此外,請注意這裡的initialHero
和newHero
之間的差異。前者在首次呼叫鉤子時用於初始化第一個狀態值:
const { UpdateHero } = useHero(someValueHere);
而後者在呼叫UpdateHero
時用於將其更新為新值:
<button class="active" onClick={() => UpdateHero(hero)}>
請注意,在上述程式碼中,您不會直接在標記中呼叫鉤子。鉤子會在元件的早期調用(並且在每次渲染中以相同的順序調用相同的鉤子)。然後可以稍後使用鉤子傳回的資料和/或函數。
一些注意事項:
hero
。我想鉤子也應該返回該值,以便可以使用它。 UpdateHero
在這裡是多餘的,您可以直接回傳setHero
。 我假設這兩個問題都是因為這只是您嘗試做的事情的一個非常簡化的示例,實際的鉤子比這個更複雜。但是,如果不考慮這些問題,上述鉤子可以簡化為:
export const useHero = (initialHero) => { const [hero, UpdateHero] = useState(initialHero); return { hero, UpdateHero }; }