2017-07-02 95 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

相关问题