什麼是派生狀態?考慮文字的一種狀態,然後考慮大寫文字的另一種狀態。
function Foo() { const [text, setText] = useState('hello, za warudo!'); const [uppercaseText, setUppercaseText] = useState(text.toUpperCase()); useEffect(() => { setUppercaseText(text.toUpperCase()); }, [text]) ... }
這麼說吧,認為有人會這樣做真是太瘋狂了……對吧?正確的?
是的,這樣的例子就可以清楚地表明這是錯誤的。
說這是一個昂貴的計算......解決方案是使用 useMemo.
function Foo() { const [text, setText] = useState('hello, za warudo!'); const uppercaseText = useMemo(() => text.toUpperCase(), [text]); ... }
我想出了一個很好的思考方式,應該可以更容易地知道一個狀態應該是「另一個狀態」還是只是一個計算屬性(是否記住,取決於情況) 。
function Foo({ text = 'hello, za warudo!', uppercaseText = text.toUpperCase(), }) { ... } // Forget react for a moment... // Would you ever call a function like this? const text = 'hello, za warudo!'; Foo({ text, uppercaseText: text.toUpperCase(), });
如果您將這些狀態視為“道具”,那麼這使它更明顯地成為它應該的樣子。
完全忘記 React,只考慮函數:
您會呼叫一個帶有變數的函數,然後呼叫另一個可以在內部計算的變數嗎?
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3