【发布时间】:2018-03-19 10:31:08
【问题描述】:
我正在学习 redux 的工作原理,但它需要大量代码来做简单的事情。例如,我想在显示之前从服务器加载一些数据。出于编辑的原因,我不能简单地使用传入的道具,而是必须将道具数据复制到本地状态。
据我所知,我必须发送 Fetch_request 操作。如果成功,则 fetch_success 操作将使用新项目更新商店。然后更新的项目将导致我的组件的渲染功能更新。
在组件中
componentWillMount() {
this.props.FETCH_REQUEST(this.props.match.params.id);
}
...
在行动中
export function FETCH_REQUEST(id) {
api.get(...)
.then(d => FETCH_SUCCESS(d))
.catch(e => FETCH_FAILURE(e));
}
...
在减速器中
export function FETCH_REDUCER(state = {}, action ={}) {
switch (action.type) {
case 'FETCH_SUCCESS':
return { ...state, [action.payload.id]: ...action.payload }
...
}
返回组件
this.props.FETCH_REDUCER
// extra code for state, getting desired item from...
相反,我可以调用 react-thunk 函数并传递一些回调函数吗? react-thunk 可以更新存储,回调可以改变组件的本地状态。
在组件中
componentWillMount() {
this.props.FETCH_REQUEST(this.props.match.params.id, this.cbSuccess, this.cbFailure);
}
cbSuccess(data) {
// do something
}
cbFailure(error) {
// do something
}
...
在行动
export function FETCH_REQUEST(id, cbSuccess, cbFailure) {
api.get(...)
.then(d => {
cbSuccess(d);
FETCH_SUCCESS(d);
}).catch(e => {
cbFailure(d);
FETCH_FAILURE(e);
});
}
...
这是不恰当的吗?我可以用 redux-observable 做同样的事情吗?
更新 1
我几乎把所有东西都移到了 redux 商店,即使是为了编辑(即将this.setState 替换为this.props.setState)。它简化了状态管理。但是,每次任何输入的 onChange 触发时,都会弹出一个新状态。 有人可以确认这是否可以吗?我担心应用程序的内存管理,因为 redux 会为每个状态保存一个 ref。
【问题讨论】:
标签: javascript reactjs redux redux-thunk redux-observable