【发布时间】:2017-12-05 23:30:42
【问题描述】:
堆栈:Meteor 1.5、React、Redux、React Router 4
我正在尝试在 React 组件中显示一系列事件。应该根据一些 Redux 状态过滤事件。过滤应该发生在服务器端(以最小化流量) - 即通过订阅中的参数。
现在我不希望我的所有 Meteor 日期都处于 Redux 状态,而只希望一些常规应用程序设置(用户设置、过滤器、位置等)。
我的方法如下:
- 用 Redux 状态连接哑组件并获取过滤器
- 将连接的组件包装在 createContainer 中并传递 props(应包括过滤器)。
我的问题是:
道具不包括过滤器。有人知道为什么吗?代码如下。控制台日志只显示 Home 组件的 props(即未连接的组件)。
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)
【问题讨论】:
-
您确定
state.filter不是undefined或null? -
据我从文档中可以看出,传递给
createContainer()的箭头函数在渲染时传递给connectedHomeContainer的道具,而不是redux 注入的道具。把它转过来,用connect()包裹createContainer()调用,它应该可以工作。 -
@trixn: 是的,确保 state.filter 不为空(也使用其他状态进行测试)太好了!扭转它的工作。你要写答案,还是要我自己回答?干杯!
标签: reactjs meteor redux react-redux