Redux - 异步 - 输入字段更改时的 POST 状态

Posted

技术标签:

【中文标题】Redux - 异步 - 输入字段更改时的 POST 状态【英文标题】:Redux - Async - POST state on input field change 【发布时间】:2017-09-15 06:43:48 【问题描述】:

我有一个包含一些非常简单的表单字段的应用程序,并且希望在每次更新字段时触发对服务器的 POST 请求,以便在数据库中同步数据。

在输入字段更改时,将使用要更新的字段的键和值调度同步操作。此操作由以下 reducer 处理。

export const reducer = (state, action) => 
  switch(action.type) 
    case INPUT_FIELD_UPDATE:
      return Object.assign(, state, 
        [action.key]: action.value
      );
    default:
      return state;
  
;

现在我想将整个新的更新状态发布到服务器。

    如何使用 redux-saga/redux-thunk 来实现?在上述reducer完成更新状态后立即触发另一个动作是否正确?如何触发此类操作?

根据下面的响应,我将使用新值更新状态,然后将数据发布到 saga 处理程序生成器中的服务器,但我不确定此实现是否正确。 How to fire AJAX calls in response to the state changes with Redux?

    POST 整个状态并在每次更改时将其与服务器同步是否正确?是否应该只发布新值并在响应时更新应用状态?

    您会建议一种完全不同的方法吗?

我想澄清一下,经过一段时间的搜索,我的问题没有找到任何明确的答案。 Redux 堆栈中的新成员,我不太确定我的问题可能有多相关。

【问题讨论】:

【参考方案1】:

实现比最初想象的要简单得多。我唯一需要做的就是在我的 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);

【讨论】:

以上是关于Redux - 异步 - 输入字段更改时的 POST 状态的主要内容,如果未能解决你的问题,请参考以下文章

react-redux,使用一个操作从两个输入字段中更改对象键/值

异步验证后的 Redux-Form 文件上传

Redux - 调度异步操作时更改 URL

以编程方式更改 Redux-Form 字段值

如何根据 Redux Form 中的另一个输入有条件地显示一个输入?

如何清除表单中的某些字段 - Redux-Form