我想将此生命周期方法重写为一个钩子,但它没有按预期工作。当组件挂载时,如果本地存储中存在用户ID,则连接用户并在导航栏中显示他的姓名。当他断开连接并重新连接时,他的名字会显示在导航栏中。所以我试图用钩子转换这个类组件,当用户名发生变化时,导航栏中不会显示任何内容,所以我必须刷新页面,这样他的名字就会显示出来
真正的问题是 componentDidUpdate 我如何获取 prevProps 并将其与钩子进行比较
类组件
const mapStateToProps = state => ({
...state.authReducer
}
);
const mapDispatchToProps = {
userSetId,
userProfilFetch,
userLogout
};
class App extends React.Component {
componentDidMount() {
const userId = window.localStorage.getItem("userId");
const {userSetId} = this.props;
if (userId) {
userSetId(userId)
}
}
componentDidUpdate(prevProps, prevState, snapshot) {
const {userId, userProfilFetch, userData} = this.props; //from redux store
if(prevProps.userId !== userId && userId !== null && userData === null){
userProfilFetch(userId);
}
}
render() {
return (
<div>
<Router>
<Routes/>
</Router>
</div>
);
}
}
export default connect(mapStateToProps,mapDispatchToProps)(App);
带挂钩
const App = (props) => {
const dispatch = useDispatch();
const userData = useSelector(state => state.authReducer[props.userData]);
const userId = window.localStorage.getItem("userId");
useEffect(()=> {
if(!userId){
dispatch(userSetId(userId))
dispatch(userProfilFetch(userId))
}
}, [userData, userId, dispatch])
return(
<Router>
<Routes/>
</Router>
)
};
export default App;
开心每一天1111
慕桂英4014372
相关分类