代码之家  ›  专栏  ›  技术社区  ›  Fox

带回调的重做中间件

  •  0
  • Fox  · 技术社区  · 8 年前

    我非常喜欢这样写动作的概念:

    function signUp(data, callback) { 
    return {
        [CALL_API]: {
          type: 'SOME_TYPE',
          url: `/api/account/signup`, 
          method: 'POST',
          data: data
    
        }
      }
    }
    

    但是像这样的事情 signUp 我不想修改/触摸 百货商店 从服务器获取回调


    在我的 反应 组件我有一个通过操作调用api并更改状态的操作。

      this.signUp($(form).serialize(), function(data) {  this.setState({response: data});   }.bind(this))
    

    和操作 注册 看起来像这样

    function signUp(data, callback) { 
     postRequest(
        '/api/account/signup', 
        data, 
        'POST', 
        callback)
    }
    
    
    function postRequest(url, data, method, callback) { 
    callback(true); //// just testing  
    }
    

    正如您所看到的,与 第一


    问题 :是否有方法修改redux中间件或有替代的JSON函数(类似于 CALL_API )在不接触商店的情况下接受对组件的回调?我真的很想使用 呼叫_ API 语法:)

    2 回复  |  直到 8 年前
        1
  •  0
  •   Radio-    8 年前

    // Action creator    
    function signUp(data, callback) { 
      return {
          type: CALL_API
          url: '/api/account/signup', 
          method: 'POST',
          data: data,
          callback: callback
      }
    }
    
    // Middleware
    const actionInterceptor = store => next => action => {
        if (action.type === CALL_API) {
            postRequest(action.url, action.method, action.data, action.callback);
        }
        else {
            return next(action);
        }
    }
    
    ...
    
    const store = createStore(reducer, initialState, applyMiddleware(actionInterceptor));
    
        2
  •  0
  •   Community CDub    5 年前

    我非常喜欢这样写动作的概念:

    ...

    但对于signUp之类的东西,我不想修改/触摸商店以从服务器获得回调

    好的,但是使用redux有什么意义呢?

    我的理解是:
    你想打电话给我 dispatch(signUp(data, callback)) (简化)

    您的signUp actionCreator应该如下所示:

    function signUp(data, callback) {
      return function(dispatch) {
        //.. do your stuff with data..
        //.. and call your callback or pass it to another function
      }
    }
    

    对不起,如果误解了你的问题,如果还有不清楚的地方,请写评论。