2016-11-11 4 views
0

다른 상태 트리가 있고 이미 로그인 한 프로덕션 React/Redux 응용 프로그램에 새 번들을로드하고 싶습니다. 이러한 사용자가 로그 아웃하도록하여 상태 트리를 재설정 할 수 있습니다.프로덕션에서 기존 Redux 저장소에 버전 번호 유지

노드에서 버전을 전달하여 내 접근


, 내가 가진 (또는없이) 버전 키 상태 트리로 version: {latest: VERSION, current: null} 키를 삽입 할 저장소를 구성 할 수 있습니다. 로컬 저장소에서 사용자의 기존 상태를로드 할 때 (사용자가 노드 서버에 다시 연결할 때만 발생 함) 상태 트리에이를 "납치"할 수있었습니다.

const {VERSION} = process.env; 

const preloadedState = loadStateFromLocalStorage(); 

const browserVersion = (preloadedState.version && preloadedState.version.current) || null; 

const store = createStore(
    rootReducer, 
    Object.assign({}, preloadedState, {version: {latest: VERSION, current: browserVersion}}), 
    middleware 
); 

current 버전 대 latest 버전 (가 인증 후 마운트 할 수있는 첫 번째 구성 요소이기 때문에) 그때 내 AppContainer 구성 요소에서 확인할 수 있습니다.

class AppContainer extends React.Component { 
    componentDidMount() { 
     this.props.dispatch(checkForUpdates()); 
    } 
    componentDidUpdate() { 
     this.props.dispatch(checkForUpdates()); 
    } 
    render() { 
     return <App {...this.props} /> 
    } 
} 

checkForUpdates()는 사용자가 계속 로그 아웃해야 함을 나타냅니다 모달 메시지를 표시합니다. 로그 아웃하면 전체 상태가 {version: {latest: VERSION, current: VERSION}}으로 설정됩니다.


이 방법은 내가 업그레이드의 (a)에 통보 사용자에게 기본적으로 이는 달성하기 위해 시도하고있는 무슨 달성에 지나치게 복잡한 것 (b)는 사용자 출력/퍼지 상태 (c)에 로그인 새, 초기 상태를로드 업데이트 된 JS 번들에서.

엣지 케이스의 경우 어떻게 사용합니까? 상태 트리에 버전 번호를 저장하는 것이 합리적인 방법일까요?

답변

1

Redux에서 사용해야하는 이유가 무엇입니까?

ReactDOM.render을 수행하기 전에 바닐라 JS를 사용하여 버전을 비교하여 전체 감속기와 디스패치를 ​​피할 수 있습니다.

UPDATE :

redux-persistredux-persist-migrate를 살펴 보자. 나는 그것들을 사용하지 않았지만 그것은 redux state persistance와 migration 이상의 추상화이다.

+0

DOM 트리가 현재 세션을 반영하고 상태 트리의 항목 (예 : 모달 기능)을 활용해야합니다. – Himmel

관련 문제