Redux ComponentDidMount未触发

时间:2017-11-28 19:02:46

标签: reactjs redux

我在执行操作后无法让Component重新渲染。我知道我必须在我的reducer中返回一个新对象,所以我返回一个全新的状态,但它仍然没有触发componentDidMount()render()

我的组件:

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永远不会触发。有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

<td>Sat Jan 01 00:00:00 CST 1</td> <td>2020-17-1</td> <td>0001-01-01</td> 仅被称为ONCE。这是组件第一次完成加载的时间。如果你正在更新redux商店,那么你将接到componentDidMount的电话,如果你在那里触发了渲染,你会看到componentWillReceiveProps将被激活。

编辑:当通过redux收到新道具时,组件将再次渲染... componentDidUpdate仍然只会被调用一次。您最好使用componentDidMountcomponentWillReceiveProps来完成您想要完成的任务。

在下面的评论(押韵)中向Dan O表示我的错误。