亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的 redux 選擇器行為不正確?

為什么我的 redux 選擇器行為不正確?

至尊寶的傳說 2022-06-09 11:02:14
我試圖了解重新選擇,但到目前為止失敗了。我知道他們在那里是為了性能等。如果該組件沒有發生狀態更改,它是否應該停止調用 mapStateToProps?我有這個組件const mapStateToProps = ({ data: { complete } }) => ({    isComplete: complete,})這會在每次狀態更改時調用,我只希望在狀態從 false 更改為 true 時調用它所以我嘗試了這個const checkIfIsComplete = () => createSelector((state, props) => props.data.complete)const mapStateToProps = () => {    const getIsComplete = checkIfIsComplete()    return (state, ownProps) => {        return {            complete: getIsComplete(state, ownProps),        }    }}但是,這與此錯誤有關:Can't perform a React state update on an unmounted component.如何修復此組件,使其僅在需要時調用 mapStateToProps 并始終返回正確的值?
查看完整描述

2 回答

?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

不,你誤解了它的mapState工作原理。 mapState始終在根狀態發生更改時調用。

這里記憶選擇器的目的是確保在mapState組件關心的狀態沒有改變的情況下返回相同的值,因為connect使用返回值的淺比較來決定組件是否應該重新渲染。

請通讀React-Redux 使用指南,mapState了解如何mapState正確使用。我在Using Reselect Selectors for Encapsulation and Performance上的帖子討論了為什么以及如何使用 Reselect。


查看完整回答
反對 回復 2022-06-09
?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

你可以像這樣創建你的選擇器:


const selectData = state => state.data;


const selectIsComplete = createSelector(

  selectData,

  (data) => data.complete

)


const mapStateToProps = createSelector(

  selectIsComplete,

  //only create a new object with complete property

  //  if complete changes

  complete=>({complete})

)

如果 ownProps 更改,組件仍將重新渲染,但如果它沒有 ownProps,那么只有在完成更改時才會重新渲染。


查看完整回答
反對 回復 2022-06-09
  • 2 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號