我在执行操作后无法让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永远不会触发。有什么想法吗?
谢谢!
答案 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
仍然只会被调用一次。您最好使用componentDidMount
和componentWillReceiveProps
来完成您想要完成的任务。
在下面的评论(押韵)中向Dan O表示我的错误。