Stack :Meteor 1.5,React,Redux,React Router 4
我正在尝试在React组件中显示一系列事件。应根据某些Redux状态过滤事件。过滤应该发生在服务器端(以最小化流量) - 即通过订阅中的参数。
现在我不希望我的所有Meteor日期都处于Redux状态,而只需要一些常规应用程序设置(用户设置,过滤器,位置等)。
我的方法如下:
我的问题是:
道具不包含过滤器。谁知道为什么?代码如下。控制台日志仅显示Home组件的道具(即未连接的组件)。
class Home extends Component {
render () {
return (
<div>
{ /* display events here */ }
</div>
)
}
}
const mapStateToProps = state => {
return {
filter: state.filter
}
}
let connectedHomeComponent = connect(mapStateToProps,)(Home)
export default connectedHomeContainer = createContainer(_ => {
console.log(_);
let eventsSub = Meteor.subscribe('getEventsByFilter');
let loading = !eventsSub.ready();
let events = null;
loading ? (events = null) : (events = Events.find().fetch());
let eventsExists = !loading && !!events;
return {
loading,
events,
eventsExists,
}
}, connectedHomeComponent)
答案 0 :(得分:1)
您以错误的顺序包裹了Home
组件。你的回调函数会传递你的HomeContainer
组件传递的道具。因此,如果您希望redux将filter
道具注入您的HomeContainer
,那么您必须将其转为:
const HomeContainer = createContainer(_ => {
console.log(_);
const eventsSub = Meteor.subscribe('getEventsByFilter');
const loading = !eventsSub.ready();
let events = null;
loading ? (events = null) : (events = Events.find().fetch());
const eventsExists = !loading && !!events;
return {
loading,
events,
eventsExists,
} }, Home)
export default connectedHomeContainer = connect(mapStateToProps)(HomeContainer)
附注:默认情况下使用const
,如果您稍后需要改变变量,则只将其更改为let
。