2016-08-19 3 views
0

반응에서 redux를 사용하여 어떻게 mapStateToProps 함수 내부에서 작업을 디스패치 할 수 있습니까? 구성 요소의 렌더링이 아약스에 의해 호출되는 사용자 데이터에 크게 의존하기 때문에redux mapStateToProps 빈 상태의 ajax 호출

class Example React.Component { 
    render(){return (
    <div> 
     Hello {this.state.userData.name} <-- 
    </div>)}; 
); 

Example.propTypes = { 
    id: PropTypes.number.isRequired, 
}; 

function select(state,ownProps) { 
    let userData = state.user[ownProps.id]; 
    if(!userData){//if not already in store then i want to load it 
    ///I WANT TO dispatch an action that load this user from server. 
    //dispatch({type:'LOAD_USER',id: ownProps.id}); 
    } 
    return { 
    userData 
    }; 
} 

export default connect(select)(Example); 

/// 사용 예 // 파견 할 수있는 권리 장소를

+0

대신 'componentDidMount' 또는'componentWillReceiveProps'에서 보내십시오 – Deadfish

+0

@Deadfish 유효한 포인트 .. 바보 같은 날! 고마워요 내가 게시물을 삭제하고 수치심에 숨어야하는지 궁금해! #mental_block – Zalaboza

답변

0

을 .NAME [1] state.user을 반환해야 할 것이다 componentWillReceiveProps이되어야합니다. 당신이 connect()mapDispatchToProps 콜백에 통과 한 경우

, 당신은 componentWillReceivePropsthis.props.actions.anyAction()를 호출 할 수 있어야합니다. 두 번째 매개 변수 (mapDispatchToProps)에 통과하지 않고 connect()라고했다면

, 당신은 내가보기 엔 비동기 작업 무용담을 사용하는 것이 좋습니다 것입니다 명시 적으로 this.props.dispatch()

0

를 호출해야합니다. 이 작업을 위해 사가가 있습니다. 표시되는 경우 사용자가 매장에 있는지 확인하십시오. 저장소에 없다면 비동기 작업을 수행하여 저장소에 추가하고 이전 작업을 재생합니다.

관련 문제