2017-07-02 100 views
0

我可以使用每個容器中的條件顯示裝載程序圖標,但是當使用高級組件時,我無法顯示它。我已經在下面發佈了我的代碼。我使用了immutable.js,redux-saga。下面是一個不工作顯示裝載程序使用高級組件

const mapStateToProps = createStructuredSelector({ 
    logs: selectLogs(), 
    logState: selectAllLogState(), #has requesting flag in it 
    dialog: selectDialog() 
}); 

class Logs extends React.PureComponent {} 

export default connect(mapStateToProps, mapDispatchToProps)(
    Loader("requesting")(Logs) 
); 

export const selectAllLogState =() => state => state.get("logs"); 

export const selectLogs =() => state => state.getIn(["logs", "logs"]); 

const Loader = prop => WrappedComponent => { 
    return class Loader extends React.Component { 
    render() { 
     return this.props[prop] 
     ? <div className="earth-spinning"> 
      <img 
       src={EarthSpinning} 
       alt="spinner" 
       style={{ margin: "0 auto" }} 
      /> 
      </div> 
     : <WrappedComponent {...this.props} />; 
    } 
    }; 
}; 

export default Loader; 

const initialState = fromJS({ 
    requesting: false, 
    deleted: false, 
    response: {}, 
    logs: {}, 
    error: null 
}); 

function showLogs(state = initialState, action) { 
    switch (action.type) { 
    case LOGS_FETCH_REQUEST: 
     return state.set("requesting", true); 
    case LOGS_FETCH_SUCCESS: 
     return state 
     .set("requesting", false) 
     .set("logs", fromJS(action.logs.data.dataList, idReviver)); 
    case LOGS_FETCH_FAILURE: 
     return state.set("error", action.error).set("requesting", false); 
    default: 
     return state; 
    } 
} 

export default showLogs; 

回答

0

很難在這個片段中說我已經編寫的代碼,你確定你的組織從商店得到正確的道具?

+0

這裏是一個有日誌,減速機的完整代碼的依據,選擇器和加載器https://gist.github.com/MilanRgm/59ea4169db18378cb0fd64aafff8c77e – Serenity

+0

據我所見,你的'requested'道具在'this.props'的'logs'鍵裏面 – vrael560

+0

如何將請求標誌發送到Loader HOC,以使加載程序也可以被其他組件使用,而不僅僅是日誌組件? – Serenity

0

您可以從您的selectLogs()通話傳遍鍵,如

createStructuredSelector({ ...selectLogs(), logState: selectAllLogState(), });

或明確設置此道具:

const mapStateToProps = createStructuredSelector({ logs: selectLogs(), requesting: selectLogs().requesting });

+0

但selectLogs只記錄對象而不是請求標誌。我只提取選擇器中的日誌對象的原因是由於其他標誌,如響應,錯誤,刪除等,這是不需要的任何時間 – Serenity

+0

好吧,但你需要以某種方式獲得'請求'價值存儲在你的'mapStateToProps'功能 – vrael560

+0

Loader('logState')(日誌)工作,但日誌頁面不斷渲染。 – Serenity

相關問題