【问题标题】:Add an async code inside a redux action generator without returning a function and using redux-thunk?在 redux 动作生成器中添加异步代码而不返回函数并使用 redux-thunk?
【发布时间】:2020-11-28 06:24:23
【问题描述】:

在不使用 redux-thunk 的情况下,我想在返回动作本身之前在动作生成器函数内的 firebase 实时数据库中添加一个对象(费用)。如果我能够执行异步函数,我认为不需要 redux-thunk。 这是 src/actions/expenses.js 中的代码

export const  addExpense = ({description= '', note= '', createdAt= 0, amount= 0} = {}) => {
const expense = {
    id: uuidv4(),
    description,
    note,
    createdAt,
    amount
}

const db = firebase.database()
db.ref('expenses').push(expense)

return {
    type: 'ADD',
    expense
}

}

【问题讨论】:

    标签: javascript redux redux-thunk


    【解决方案1】:

    虽然它在技术上是可行的,但这样你就更难编写测试了(请参阅this example)。

    如果你不关心测试......你可能一开始就不需要 redux

    【讨论】:

    • 我阅读了文档,它没有提到使用 thunk 使测试更容易
    • 它没有,使用纯动作创作者可以
    • 但是对于 thunk 也是如此,它们不是纯粹的,甚至它们的目的是包含属于 API 的异步函数,因此它们也是不纯粹的函数。
    • 是的,我的意思很简单,如果动作创建者不是纯粹的,你就不能安全地写出像assertEqual( addItem(item), { type: 'ADD_ITEM', payload: item })assertEqual( itemsReducer([], addItem(item)), [item]) 这样的东西。 Redux thunk 不能帮助您测试效果,因为您需要类似 redux-saga 的东西
    猜你喜欢
    • 2018-01-31
    • 2021-05-17
    • 2021-12-11
    • 2021-10-04
    • 1970-01-01
    • 2019-02-03
    • 2019-11-12
    • 2017-01-12
    • 2018-05-21
    相关资源
    最近更新 更多