하나는 react / redux 어플리케이션에서 서비스 인스턴스를 보유합니까? [javascript]


Answers

Redux 문서에서 :

/**
 * Sends crash reports as state is updated and listeners are notified.
 */
const crashReporter = store => next => action => {
  try {
    return next(action)
  } catch (err) {
    console.error('Caught an exception!', err)
    Raven.captureException(err, {
      extra: {
        action,
        state: store.getState()
      }
    })
    throw err
  }
}

Raven 은 제 3 자 라이브러리입니다.

라이브러리에 자체 상태가 있으면 미들웨어에서 상태를 사용하여 문제가되어서는 안됩니다 (상태는 라이브러리가 아니라 앱에 속합니다). 어떤 이유로 그 상태를 작성하는 경우, 그 상태는 아마도 store.logger 또는 다른 것으로 Redux 상점에 속해야합니다.

Question

Redux에서 응용 프로그램을 작성 중이며 제 3 자 라이브러리를 사용하여 로깅을 추가해야한다고 가정합니다. API는 다음과 같습니다.

function createLogger(token) {
    // the logger has internal state!
    let logCount = 0;

    return {
        log(payload) {
            logCount++;            // modify local state

            fetch('/someapi', {    // ship payload to some API
                method: 'POST',
                body: payload
            });
        }
    };
}

그런 다음 라이브러리를 다음과 같이 사용합니다.

let logger = createLogger('xyz');
logger.log('foobar');

응용 프로그램 초기화 중에 한 번만 로거 인스턴스를 만들고 싶습니다. 하지만 질문은 : 로거 인스턴스를 어디에 저장해야 합니까?

첫 번째 명령은 상점에 어딘가에 넣는 것입니다. 그러나 그게 좋은 생각입니까? 코드에서 로거 객체가 상태 저장임을 증명 했으므로 클로저에 카운터를 저장합니다. 나는 불변 객체를 가지고있는 것처럼 새로운 인스턴스를 얻지 못한다. 우리가 알다시피 상태는 순수 감속기 기능을 통해서만 수정해야합니다.

다른 가능성은 redux 미들웨어 클로저에서 어딘가에 인스턴스를 생성하거나 전역 변수를 생성하는 것입니다. 이는 테스트 가능성 측면에서 명백하게 악합니다.

오히려 공통적 인 시나리오가 될 수있는 최선의 방법이 있습니까?