正在分派类型和有效负载而不调用它
Type and payload are being dispatched without calling it
我目前正在开发具有聊天功能的 react-native
应用程序。我正在使用 redux
来存储我的状态。所以在按下发送按钮发送消息后,调用一个动作将消息发送到 firebase 并在之后显示在屏幕上。
我目前的问题是,当我调用的动作调度正确的 type/payload 时,另一个 type/payload 也在被调度,它没有在被调用的动作中被调度。显然以某种方式调用了另一个包含 type/payload.
的动作
未被调用的动作代码如下:
const getChatData = (chatIDs, userName, uid) => async dispatch => {
console.log('hasdhkhwerljlkbgkanndhadndngknnjnjsnfjskdnfjsuvhshdifhuishiduhfuishdkfnkjsndf')
const chatData = []
for (const key of chatIDs) {
[...]
// get message
firebase.database().ref('messages/' + key)
.orderByChild('timestamp').limitToLast(1)
.on('child_added', snapshot => {
const { text, timestamp, user } = snapshot.val();
const { name } = user;
chatData.push({ key, members: displayNameArray, text, timestamp, name })
dispatch({
type: GET_CHAT_DATA,
payload: chatData
})
})
})
}
}
如我所说,尽管未调用此操作,但正在调度 GET_CHAT_DATA
类型。此外,console.log 没有显示长测试消息,这应该意味着没有调用此操作,对吗?
什么会导致这种奇怪的行为?
非常感谢!
所以问题是即使你没有执行函数但是你在 firebase 上注册了一个事件
.on('child_added', snapshot => { })
现在,只要触发此 child_added
事件,就会执行处理程序。
这就是为什么您的调度程序是 运行 因为它在事件处理程序中。
firebase.database().ref('messages/' + key)
.orderByChild('timestamp').limitToLast(1)
.on('child_added', snapshot => {
// this is the event handler which is executing
// when the "child_added" event is triggered
const { text, timestamp, user } = snapshot.val();
const { name } = user;
chatData.push({ key, members: displayNameArray, text, timestamp, name })
dispatch({
type: GET_CHAT_DATA,
payload: chatData
})
})
})
我目前正在开发具有聊天功能的 react-native
应用程序。我正在使用 redux
来存储我的状态。所以在按下发送按钮发送消息后,调用一个动作将消息发送到 firebase 并在之后显示在屏幕上。
我目前的问题是,当我调用的动作调度正确的 type/payload 时,另一个 type/payload 也在被调度,它没有在被调用的动作中被调度。显然以某种方式调用了另一个包含 type/payload.
的动作未被调用的动作代码如下:
const getChatData = (chatIDs, userName, uid) => async dispatch => {
console.log('hasdhkhwerljlkbgkanndhadndngknnjnjsnfjskdnfjsuvhshdifhuishiduhfuishdkfnkjsndf')
const chatData = []
for (const key of chatIDs) {
[...]
// get message
firebase.database().ref('messages/' + key)
.orderByChild('timestamp').limitToLast(1)
.on('child_added', snapshot => {
const { text, timestamp, user } = snapshot.val();
const { name } = user;
chatData.push({ key, members: displayNameArray, text, timestamp, name })
dispatch({
type: GET_CHAT_DATA,
payload: chatData
})
})
})
}
}
如我所说,尽管未调用此操作,但正在调度 GET_CHAT_DATA
类型。此外,console.log 没有显示长测试消息,这应该意味着没有调用此操作,对吗?
什么会导致这种奇怪的行为?
非常感谢!
所以问题是即使你没有执行函数但是你在 firebase 上注册了一个事件
.on('child_added', snapshot => { })
现在,只要触发此 child_added
事件,就会执行处理程序。
这就是为什么您的调度程序是 运行 因为它在事件处理程序中。
firebase.database().ref('messages/' + key)
.orderByChild('timestamp').limitToLast(1)
.on('child_added', snapshot => {
// this is the event handler which is executing
// when the "child_added" event is triggered
const { text, timestamp, user } = snapshot.val();
const { name } = user;
chatData.push({ key, members: displayNameArray, text, timestamp, name })
dispatch({
type: GET_CHAT_DATA,
payload: chatData
})
})
})