Lee*_*Lee 44 reactjs reactjs-flux redux-framework redux
我想知道使用Redux的人们是如何接近他们的后端持久性的.特别是,您是将"操作"存储在数据库中还是仅存储应用程序的最后已知状态?
如果要存储操作,是否只是从服务器请求它们,然后在给定页面加载时重放所有这些操作?这可能导致一些大型应用程序存在大量行为的性能问题吗?
如果您只存储"当前状态",那么在客户端执行操作时,您在任何给定时间实际上是如何持久保持此状态的?
有没有人有一些代码示例,说明他们如何将redux reducer连接到后端存储api?
我知道这是一个非常"取决于你的应用程序"类型的问题,但我只是在思考一些想法,并试图了解这种"无状态"架构如何在全栈意义上工作.
感谢大家.
Dan*_*Fox 34
绝对坚持你的减速机的状态!
如果您持续执行一系列操作,则无法在您的prod数据库中进行修改而无法修改前端中的操作.
示例:将一个reducer的状态持久保存到服务器
我们将从三个额外的动作类型开始:
// actions: 'SAVE', 'SAVE_SUCCESS', 'SAVE_ERROR'
Run Code Online (Sandbox Code Playgroud)
我使用redux-thunk来执行异步服务器调用:这意味着一个动作创建器函数可以执行dispatch额外操作并检查当前状态.
该save行动的创建者立即派遣一个动作(这样就可以显示一个微调,或禁用您的UI中的"保存"按钮).然后,一旦POST请求完成,它就会调度SAVE_SUCCESS或执行SAVE_ERROR操作.
var actionCreators = {
save: () => {
return (dispatch, getState) => {
var currentState = getState();
var interestingBits = extractInterestingBitsFromState(currentState);
dispatch({type: 'SAVE'});
window.fetch(someUrl, {
method: 'POST',
body: JSON.stringify(interestingBits)
})
.then(checkStatus) // from https://github.com/github/fetch#handling-http-error-statuses
.then((response) => response.json())
.then((json) => dispatch actionCreators.saveSuccess(json.someResponseValue))
.catch((error) =>
console.error(error)
dispatch actionCreators.saveError(error)
);
}
},
saveSuccess: (someResponseValue) => return {type: 'SAVE_SUCCESS', someResponseValue},
saveError: (error) => return {type: 'SAVE_ERROR', error},
// other real actions here
};
Run Code Online (Sandbox Code Playgroud)
(NB $.ajax完全可以代替这些window.fetch东西,我只是不想为一个函数加载整个jQuery!)
reducer只跟踪任何未完成的服务器请求.
function reducer(state, action) {
switch (action.type) {
case 'SAVE':
return Object.assign {}, state, {savePending: true, saveSucceeded: null, saveError: null}
break;
case 'SAVE_SUCCESS':
return Object.assign {}, state, {savePending: false, saveSucceeded: true, saveError: false}
break;
case 'SAVE_ERROR':
return Object.assign {}, state, {savePending: false, saveSucceeded: false, saveError: true}
break;
// real actions handled here
}
}
Run Code Online (Sandbox Code Playgroud)
您可能希望对someResponseValue从服务器返回的内容做一些事情- 也许它是新创建的实体等的ID.
我希望这有帮助,它对我来说效果很好!
| 归档时间: |
|
| 查看次数: |
11539 次 |
| 最近记录: |