2017-07-30 51 views
0

新概念和设置,所以我很抱歉我的vage描述!Redux佐贺类发电机

我试图为我有不同的模块创建可重用的传奇。我遇到的问题是this似乎超出了类中的生成器函数的概念,所以我正确地认为这个函数被静态调用?

有没有人有任何想法我可以实现这种结构?基本上我想要做的是调用一个函数,我可以操纵url变量和一个叫config的对象。我来自PHP背景,所以我有扩展Abstract类的想法。

export default class Saga { 
    config = {}; 
    constructor(config) { 
     this.config = config; 
    } 
    * paginationAsync() 
     while(true) { 
      const action = yield effects.take(this.config.PAGINATION_ASYNC); 
      const url = yield effects.call(this.generatePaginationUrl, action); 
      //this.config = "Cannot read property 'config' of null" 

      //Continue with stuff here 

     } 
    } 
} 

使用上述类

import Saga from './Saga'; 
import {effects} from 'redux-saga'; 
import * as config from './config'; 

class SalonSagas extends Saga { 
    generatePaginationUrl(action) { 
     return 'salons/'; 
    } 
} 

export default function* saga() 
{ 

    const sagas = new SalonSagas(config); 

    effects.all([ 
     effects.fork(sagas.paginationAsync), 
    ]); 
} 

上一页我用这个设置。我试图避免复制和粘贴这个函数为每个我想要使用此方法的实例。

function* pagintationAsnyc() 
    while(true) { 
     const action = yield effects.take(config.PAGINATION_ASYNC); 
     const auth = yield effects.select((state) => state.auth); 

     //generic action 

     const response = yield effects.call(api.get, '/salons', {'Authorisation': 'Bearer '+auth.token}); 

     //do more generic actions I'm trying to prevent copying and pasting 

    } 
} 

回答

0

您在这里使用了错误的工具。相反的一类,你应该使用返回功能(通常称为“工厂函数”或“高阶函数”快例如一个功能:

function createPaginationSaga(config) { 
    return function* paginationAsync() { 
     while(true) { 
      const action = yield effects.take(config.PAGINATION_ASYNC); 
      const url = yield effects.call(generatePaginationUrl, action); 
      //Continue with stuff here 

     } 
    } 
} 

对于这个问题,我相信你能居然直接重用paginationAsync功能,如:!

export default function* saga() { 
    yield effects.all([ 
     effects.fork(paginationAsync, config), 
    ]); 
} 

这就需要声明为function* paginationAsync(config),它应该得到的配置值作为参数

+0

感谢我给一个去我曾尝试'effects.fork(paginationAsync(config))'并且失败了所以我放弃了这个想法,然后想到也许我可以在传奇功能中做点什么,但是不确定!再次感谢! – sourRaspberri

相关问题