2017-11-28 11 views
0

アクションの後にコンポーネントを再レンダリングするのに問題があります。私は減速に新しいオブジェクトを返す必要があることを理解し、私は全く新しい状態を返すんだけど、その、まだcomponentDidMount()またはrender()をトリガしませRedux ComponentDidMountが起動しない

マイコンポーネント:

class AppTemplate extends React.Component { 

    constructor(props) { 
     super(props); 

     if(!this.props.settings.user){ 
      this.props.dispatch(userActions.get()); 
     } 
    } 

    componentDidUpdate(prevProps, prevState) { 

     console.log(prevProps, this.props); 

     //do some stuff 

    } 


    render() { 

     return (
      <SomeComponent/> 
     ); 
    } 
} 

function mapStateToProps(state) { 
    const { registration, role, settings } = state; 
    console.log(role); 
    return { 
     registration, 
     role, 
     settings 
    }; 
} 

const connectedAppTemplate = connect(mapStateToProps)(AppTemplate); 
export { connectedAppTemplate as AppTemplate }; 

マイリデューサー:

export function role(state = { role : null, loading: true }, action) { 

    switch (action.type) { 
    case 'USER_GET_PENDING': 
     return { 
     role:null, 
     loading: true 
     } 
    case 'USER_GET_FULFILLED': 
     const role = action.payload.data.roles[0]; 
     const newState = { 
     role: role, 
     loading: false 
     } 
     console.log(state, newState); 
     console.log(state == newState); 
     return newState; 
    default: 
     return state 
    } 

} 

アクションは問題なく実行されており、mapToStateでさえも新しいロールでログに記録されますが、componentDidMountは決して起動しません。何かご意見は?

ありがとうございます!

+0

'componentDidMount'はどこですか? –

+0

答えがあなたに役立つならば、指定された回答を受け入れたものに必ずマークしてください... –

答えて

1

componentDidMountは、一度だけ呼び出されます。これは、コンポーネントが初めてロードを完了するときです。あなたはreduxストアを更新している場合、componentWillReceivePropsへの呼び出しを受け取り、そこでレンダリングをトリガーすると、componentDidUpdateが発生します。

EDIT:redux経由で新しい小道具を受け取ったときにコンポーネントが再レンダリングされますが、componentDidMountはまだ1回だけ呼び出されます。達成しようとしているものに対して、componentWillReceivePropscomponentDidUpdateを使用する方がよいでしょう。

私のエラーを指摘するために以下のコメント(その韻)のDan Oの功績があります。

+0

コンポーネントは、別のものを決定する 'shouldComponentUpdate'関数を書かない限り、新しい小道具を取得すると自動的に再レン​​ダリングします。 –

+0

@ダノあなたは正しいです、私は私の答えを修正する必要があります。私は純粋なコンポーネントを書こうとしていますので、私の場合は通常は正しいです。 –

+0

@DanOは編集を終えて、それを指摘してくれたと信じています。ありがとう。 –

関連する問題