在主要使用鉤子設計的 React 應用程式中。我不認為需要redux-thunk中間件,還是我遺漏了什么?
Redux-thunk 方法
const Component = () => {
const dispatch = useDispatch()
const user = useSelector(state => state.user)
useEffect(() => {
dispatch(getUserFromApiAndDispatch())
}, [])
return <div>{user}</div>
}
或者只是簡單地
const Component = () => {
const dispatch = useDispatch()
const user = useSelector(state => state.user)
useEffect(() => {
getUserFromApi().then(({data}) => dispatch({type: 'SET_USER'; payload: data.user})
}, [])
return <div>{user}</div>
}
uj5u.com熱心網友回復:
這取決于。當然,您可以在沒有 thunk 的情況下完成所有這些操作。異步獲取當前狀態會更臟一些(在 thunk 中,您可以呼叫getState)但它是可行的。
問題是:你失去了什么?
你失去的主要是一個概念。Redux 本身的優勢在于它在你的組件之外創建了一個資料流。您的組件只是調度一個事件,組件外的邏輯就會發生。您的組件稍后會獲得一個新狀態并顯示它。
通過將資料提取之類的東西拉入您的組件,您將失去這種好處。您現在擁有需要了解資料層和存盤內部結構的組件(在許多不同的操作應按給定順序分派的情況下),而不是執行其操作的存盤和執行其操作的組件。
邏輯移回到您的組件中,您會變得一團糟。
如果你只是使用 thunk,你的組件所做的就是dispatch(userDetailsPageDisplayed({ userId: 5 })),一段時間后,它會獲取所有資料。
有點跑題了:你在這里寫的是一種非常過時的 Redux 風格。現代 Redux 不使用 switch..case reducer、不可變的 reducer 邏輯或 ACTION_TYPES。此外,您通常不應在組件中構建分派操作。我建議你閱讀官方的 Redux 教程。然后也許可以閱讀Redux 樣式指南,以獲取更多背景關系和建議(例如,我們推薦事件型別的操作,而不是 setter 樣式的操作)。
uj5u.com熱心網友回復:
其實沒有。redux-thunk只是處理異步任務的約定。您可以使用函式或方法輕松地做到這一點。在過去,當 React 只有基于類的組件時,不可能在我們的應用程式中多次使用一個功能。但是這個問題通過有狀態的函陣列件和鉤子解決了。所以,你真的不需要 thunk。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/367819.html
標籤:反应 还原 反应钩子 redux-thunk
