关于函数式编程,当我打算使用sagas删除一个序列时,为action.serie生成一个新的对象是否正确,即使您不打算更改操纵的对象也是如此?
export function* removeSerie(action){
try{
const user = yield new Promise(resolve => {
const unsub = auth.onAuthStateChanged(user => {
if (user) {
resolve(user)
unsub()
}
})
})
const url = `users/${user.id}/series/${actio.serie.genre}/${action.serie.id}`
yield database.ref(url).remove()
yield put(ActionCreator.removeSerieSuccess(action.serie.id))
yield getSeries(action.serie.genre)
}catch({message}){
yield put(ActionCreator.removeSerieFailure(message))
}
}
or
export function* removeSerie(action){
const serie = {...action.serie} //action.serie is the serie passed for remove, with id, name, genre...
try{
const user = yield new Promise(resolve => {
const unsub = auth.onAuthStateChanged(user => {
if (user) {
resolve(user)
unsub()
}
})
})
const idUser = user.uid //is necessary do this?
const url = `users/${idUser}/series/${serie.genre}/${serie.id}`
yield database.ref(url).remove()
yield put(ActionCreator.removeSerieSuccess(serie.id))
yield getSeries(serie.genre)
}catch({message}){
yield put(ActionCreator.removeSerieFailure(message))
}
}
如何更好地使用选项?
答案 0 :(得分:0)
如果您正在谈论函数式编程中的数据不变性,则无需为示例创建浅表复制对象,而假设removeSerieSuccess
getSeries
等应为纯(或至少不更改{ {1}}通过了。
并且当您看到有时人们在传递给redux reducer之类的其他功能之前先进行浅表复制,因为它更易于检测更改,您可以通过引用进行检查,这些更改在使用激进{{1 }},以避免不必要的重新呈现。但是,实际上redux实际上并不需要要求减速器是纯净的,但是它被鼓励具有更好的可预测性。