2017-12-28 16 views
0

다음 문제점이 있습니다. 나는의 클래스가 더 많거나 적은 모양이 같은되는-반응 네이티브 :. 내 모든 기능에componentDidMount에서 반응 네이티브로 리스너를 설정하지만 호출되지 않는 새 화면으로 전달하십시오.

import {...}; 

const ReadyButton = props => (
    <View> 
    <RoundButton 
     width={175} 
     text="..." 
     onPress={props.onPress} 
    /> 
    </View> 
); 

ReadyButton.propTypes = { 
    onPress: PropTypes.func, 
}; 

const ReadyButtonContainer = connect(null, dispatch => ({ 
    onPress:() => { 
    dispatch(askIgnoreBatteryOptimizations(requestLocationPermissions)); 
    }, 
}))(ReadyButton); 

export default class CalibrationWalkInstructions extends Component { 
    componentDidMount() { 
    listenToPermissionChanges(); 
    } 

    render() { 
    const enableBackgroundDataCollectionMessage = (Platform.OS === 'ios') 
     ? '...' 
     : '...'; 

    return (
     <ScreenWrapper> 
     <CenterContent> 
      <StandardWrapper spacing={15}> 
      <FullWidthImage 
       source={PhoneInPocketIconImage} 
       width={300} 
       height={380} 
       scale={0.6} 
      /> 
      </StandardWrapper> 
      <StandardWrapper spacing={15}> 
      <PrimaryText> 
      ... 
      </PrimaryText> 
      </StandardWrapper> 
      <StandardWrapper> 
      <PrimaryText> 
       {enableBackgroundDataCollectionMessage} 
      </PrimaryText> 
      </StandardWrapper> 
      <ReadyButtonContainer /> 
     </CenterContent> 
     <TutorialBottomProgress currentStep={2} stepName={'Walk'} align={'right'} /> 
     </ScreenWrapper> 
    ); 
    } 
}; 

또한 내가 파일을 불렀다 actions.js 여기에서 나는 부착 다음 함수를 호출 할 위치 권한이 iOS 설정에서 부여되거나 변경된 경우 리스너입니다. 함수의 콜백은 사용자를 다음 화면으로 직접 유도합니다. action.js 나의 기능은 지금까지 다음과 같습니다

export function listenToPermissionChanges() { 
    console.log('FOOO listenToPermissionChanges called'); 
    return function(dispatch) { 
    console.log('FOOO inside dispatch'); 
    listenToLocationPermissionChanges(function() { 
     detachLocationPermissionChangeListener(); 
     console.log('FOOO dispatch now'); 
     dispatch({ 
     type: LOCATION_PERMISSION_GRANTED, 
     }); 
     dispatch(goToWalkCalibration()); 
    }); 
    }; 
} 

내가 위에서처럼 componentDidMount()이 함수를 호출 할 경우, 안 상기 제 FOOO 로그 문에 도달하지만, 할 수 있어요. 제 질문은 지금입니다, 왜 더 이상 얻지 못합니까? componentDidMount() 함수에서 디스패치 호출을 호출 할 수 없다는 문제가 있습니까? return 문이 누락되었거나 나머지는 실행하지만 시작되지 않는 이유는 무엇입니까?

도움/답변을 미리 보내 주셔서 감사합니다.

+1

'listenToPermissionChanges()'는 두 번째 기능 (Currying)을 반환합니다. 두 부분을 모두 실행하려면'listenToPermissionChanges() (dispatch)'를 실행해야합니다 - 아주 간단한 예제는 https://jsfiddle.net/arrbgbqn/을보세요. – Dan

답변

0

그 사람이 질문에 댓글을 달았습니다. 내가 listenToPermissionChanges()(dispatch)

componentDidMount() 함수에서 무엇인가를 파견 할 수는 없지만 해결했다. 따라서 ReadyButtonContainer에서 listenToPermissionChanges 함수를 호출하기 만하면됩니다. 다음과 같이 보입니다 :

const ReadyButtonContainer = connect(null, dispatch => ({ 
    onPress:() => { 
    dispatch(askIgnoreBatteryOptimizations(requestLocationPermissions)); 
    listenToPermissionChanges()(dispatch); 
    }, 
}))(ReadyButton);