React & Firebase + Flux:子组件不渲染
React & Firebase + Flux : Child component does not render
我已经检查了这篇SO文章,但是,该解决方案不起作用。我有一个简单的消息应用,使用Firebase + Flux:
App
-UserList Component (sidebar)
-MessageList Component
UserList 组件从 this.state.threads 获取 props(state 属于主 App 组件)。
在我的 Flux ThreadStore 中,我有以下事件侦听器绑定到 firebaseRef:
const _firebaseThreadAdded = (snapshot) => {
threadsRef.child(snapshot.key()).on('value', (snap) => {
console.log('thread added to firebase');
_threads.push({
key: snap.key(),
threadType: snap.val().threadType,
data: snap.val()});
});
}
ref.child(ref.getAuth().uid).child('threads').on('child_added', Actions.firebaseThreadAdded);
用户列表使用this.props.threads.map(thread => { return(<li>{thread.name}</li>) } )
(汇总)根据 firebaseRef/userId/threads 中的线程键在侧栏中呈现线程名称列表。
但是,在我点击应用中的任何按钮或直接从 Firebase Forge 界面中删除引用(我还有一个"child_removed"事件侦听器)之前,这不会呈现任何用户列表。
对于我的生活,我无法弄清楚这一点。谁能解释为什么会发生这种情况/如何解决?我花了整整半天的时间尝试,什么也没想出来。
仅供参考:
相关调度员注册条目:
case actionConstants.FIREBASE_THREAD_ADDED: _firebaseThreadAdded(action.data); threadStore.emitChange(); break;
相关操作条目:
firebaseThreadAdded(data) { AppDispatcher.handleAction({ actionType: actions.FIREBASE_THREAD_ADDED, data }); },
好的,所以我在大量阅读后想通了 - 对 Flux 来说有点新。问题就在这里:
case actionConstants.FIREBASE_THREAD_ADDED:
_firebaseThreadAdded(action.data);
threadStore.emitChange();
break;
emitChange()
操作是在解决 Firebase 承诺之前触发的,因此子组件在没有任何数据的情况下更新状态。因此,没有提供该清单。我所做的改变是重新构建函数,以便仅在解析时触发threadStore.emitChange()
:
const _firebaseThreadAdded = (snapshot) => {
threadsRef.child(snapshot.key()).once('value').then(snap => {
console.log('thread added to firebase: ', snap.key());
_threads.push({
threadId: snap.key(),
threadType: snap.val().threadType,
data: snap.val()});
threadStore.emitChange();
});
}
以及生成的调度程序寄存器条目:
case actionConstants.FIREBASE_THREAD_ADDED:
_firebaseThreadAdded(action.data);
break;
不知道这是否是处理此问题的最佳方法,但它正在完成这项工作 - 只有在 Firebase 加载后才会触发 emit 事件。希望这对任何有类似问题的人有所帮助 承诺/火力基地/ajax!
- 将可重复使用的组件与ReactJs和Flux一起用于多个存储
- 在Flux中处理同一组件的多个实例
- React/flux - 子组件用户事件 - 是否应通过调度程序路由所有内容
- 如何处理 React / Flux 组件中的状态转换
- React & Firebase + Flux:子组件不渲染
- React组件从Flux存储中呈现数据,但从Mongo数据库中提取数据时不呈现
- 如何使用 Flux+React.js 从数据库回调渲染组件
- Flux+React:何时在商店中保持视觉组件的状态
- 组件应在哪个嵌套级别从 Flux 中的存储中读取实体
- Flux存储将更改发送到特定的反应组件,而不是所有组件
- 当React/Flux中有几个小的、可重复的子组件时,如何管理组件渲染
- React/Flux:从组件的渲染方法中触发一个动作,或者从组件中执行一个Rest调用
- React原生路由器flux:覆盖组件内部的左键或右键,并访问本地功能
- 嵌套异步获取状态的React组件会导致Flux分发链
- 在组件中利用spinJS的Flux/ReactJS
- React + Flux——将输入绑定到单个“模型”的嵌套组件
- React/Flux实现技术不清楚父组件何时需要在子组件上拉字符串
- Flux——直接调用store的组件
- Flux:如何为可变数量的React组件创建store
- 在React + Flux中从服务返回到组件的回调