React redux 如何使用 getState()
React redux how to use getState()
我正在从 Firebase Real-time database
中获取数据并将其存储到我的 redux 状态中。我如何创建一个操作,在初始调用后获得最新和最新的状态?
const getIds = (state) => state.notes.activeNotes;
export const getUserNotes = (currentUserId) => (dispatch, getState) => {
getFromFirebase(`/Notes/${currentUserId}/`, (response) => {
var ids = Object.keys(response)
dispatch(setNoteIds(ids)); //should dispatch ids something like this [1,2,3,4,5]
})
const test= getIds(getState());
console.log(test); //current output []
}
Expected output: [1,2,3,4,5]
Actual output: []
假设函数 getFromFirebase
returns 是一个 promise,那么您可以将方法切换为异步,如下所示:
export const getUserNotes = (currentUserId) => async (dispatch, getState) => {
// wait the result dispatched
await getFromFirebase(`/Notes/${currentUserId}/`, (response) => {
var ids = Object.keys(response)
dispatch(setNoteIds(ids)); //should dispatch ids something like this [1,2,3,4,5]
})
const test= getIds(getState());
}
或者如果 getFromFirebase
不是一个承诺,你可以用一个承诺来包装它:
export const getUserNotes = (currentUserId) => async (dispatch, getState) => {
// wrap in a promise
await new Promise(resolve => {
getFromFirebase(`/Notes/${currentUserId}/`, (response) => {
var ids = Object.keys(response)
dispatch(setNoteIds(ids)); //should dispatch ids something like this [1,2,3,4,5]
resolve();
})
})
const test= getIds(getState())
}
我正在从 Firebase Real-time database
中获取数据并将其存储到我的 redux 状态中。我如何创建一个操作,在初始调用后获得最新和最新的状态?
const getIds = (state) => state.notes.activeNotes;
export const getUserNotes = (currentUserId) => (dispatch, getState) => {
getFromFirebase(`/Notes/${currentUserId}/`, (response) => {
var ids = Object.keys(response)
dispatch(setNoteIds(ids)); //should dispatch ids something like this [1,2,3,4,5]
})
const test= getIds(getState());
console.log(test); //current output []
}
Expected output: [1,2,3,4,5]
Actual output: []
假设函数 getFromFirebase
returns 是一个 promise,那么您可以将方法切换为异步,如下所示:
export const getUserNotes = (currentUserId) => async (dispatch, getState) => {
// wait the result dispatched
await getFromFirebase(`/Notes/${currentUserId}/`, (response) => {
var ids = Object.keys(response)
dispatch(setNoteIds(ids)); //should dispatch ids something like this [1,2,3,4,5]
})
const test= getIds(getState());
}
或者如果 getFromFirebase
不是一个承诺,你可以用一个承诺来包装它:
export const getUserNotes = (currentUserId) => async (dispatch, getState) => {
// wrap in a promise
await new Promise(resolve => {
getFromFirebase(`/Notes/${currentUserId}/`, (response) => {
var ids = Object.keys(response)
dispatch(setNoteIds(ids)); //should dispatch ids something like this [1,2,3,4,5]
resolve();
})
})
const test= getIds(getState())
}