Redux - 异步 - 输入字段更改时的 POST 状态
Redux - Async - POST state on input field change
我有一个包含一些非常简单的表单字段的应用程序,并且希望在每次更新字段时触发对服务器的 POST 请求,以便在数据库中同步数据。
在输入字段更改时,将使用要更新的字段的键和值调度同步操作。此操作由以下减速器处理。
export const reducer = (state, action) => {
switch(action.type) {
case INPUT_FIELD_UPDATE:
return Object.assign({}, state, {
[action.key]: action.value
});
default:
return state;
}
};
现在我想 POST 将整个新的更新状态发送到服务器。
- 如何使用 redux-saga/redux-thunk 来实现?上面的reducer刚更新完state就触发另一个action正确吗?我怎样才能触发这样的行动?
根据下面的回复,我会用新值更新状态,然后 POST 数据到 saga 处理程序生成器中的服务器,但我不确定这个实现是否正确。
How to fire AJAX calls in response to the state changes with Redux?
POST整个状态并在每次更改时将其与服务器同步是否正确?是否应该仅发布新值并根据响应更新应用程序状态?
您能推荐一种完全不同的方法吗?
我想澄清一下,经过一段时间的搜索,我没有在我的问题中找到任何明确的答案。 redux 堆栈中的新功能,我不太确定我的问题有多相关。
实施比最初想象的要简单得多。我唯一需要做的就是 "hear" 在我的 sagas 中执行相同的调度操作。
function* handleChange(action) {
try {
let state = yield select(state => state);
yield put(syncing());
const response = yield call(api,{state});
if(response.updated) {
yield put(syncSucceeded());
} else {
yield put(syncFailed());
}
} catch (e) {
yield put(syncFailed(e));
}
}
function* mySaga() {
yield takeLatest(INPUT_FIELD_UPDATE, handleChange);
}
我有一个包含一些非常简单的表单字段的应用程序,并且希望在每次更新字段时触发对服务器的 POST 请求,以便在数据库中同步数据。
在输入字段更改时,将使用要更新的字段的键和值调度同步操作。此操作由以下减速器处理。
export const reducer = (state, action) => {
switch(action.type) {
case INPUT_FIELD_UPDATE:
return Object.assign({}, state, {
[action.key]: action.value
});
default:
return state;
}
};
现在我想 POST 将整个新的更新状态发送到服务器。
- 如何使用 redux-saga/redux-thunk 来实现?上面的reducer刚更新完state就触发另一个action正确吗?我怎样才能触发这样的行动?
根据下面的回复,我会用新值更新状态,然后 POST 数据到 saga 处理程序生成器中的服务器,但我不确定这个实现是否正确。 How to fire AJAX calls in response to the state changes with Redux?
POST整个状态并在每次更改时将其与服务器同步是否正确?是否应该仅发布新值并根据响应更新应用程序状态?
您能推荐一种完全不同的方法吗?
我想澄清一下,经过一段时间的搜索,我没有在我的问题中找到任何明确的答案。 redux 堆栈中的新功能,我不太确定我的问题有多相关。
实施比最初想象的要简单得多。我唯一需要做的就是 "hear" 在我的 sagas 中执行相同的调度操作。
function* handleChange(action) {
try {
let state = yield select(state => state);
yield put(syncing());
const response = yield call(api,{state});
if(response.updated) {
yield put(syncSucceeded());
} else {
yield put(syncFailed());
}
} catch (e) {
yield put(syncFailed(e));
}
}
function* mySaga() {
yield takeLatest(INPUT_FIELD_UPDATE, handleChange);
}