Ответы пользователя по тегу React
  • Как правильно реализовать withRouter в реалях react-router-dom@6.0.2 и react-router@6.0.2?

    drno-reg
    @drno-reg Автор вопроса
    см не кратко
    ProfileContainer.js

    import React from "react";
    import Profile from "./Profile";
    import * as axios from "axios";
    import {setUserProfile} from "../../redux/profile-reducer";
    import {connect} from 'react-redux';
    import {useParams} from "react-router-dom";
    
    const withRouter = WrappedComponent => props => {
        const params = useParams();
        // etc... other react-router-dom v6 hooks
        return (
            <WrappedComponent
                {...props}
                params={params}
                // etc...
            />
        );
    };
    
    class ProfileContainer extends React.Component{
        componentDidMount() {
            // debugger;
            //
            console.log(this.props);
            let userId = this.props.params.userId;
            if (!userId){
                userId=2;
            }
            axios.get(`https://social-network.samuraijs.com/api/1.0/profile/`+userId)
                .then(response => {
                    // debugger;
                    this.props.setUserProfile(response.data);
                });
        }
        render () {
        // debugger;
        return(
    <Profile {...this.props}  profile={this.props.profile}/>
        )
      }
    }
    
    let mapStateToProps = (state) => ({
        profile: state.profilePage.profile
    });
    
    let WithUrlDataContainerComponent = withRouter(ProfileContainer);
    
    export default connect(mapStateToProps, {
        setUserProfile
    }) (WithUrlDataContainerComponent);


    App.js

    <Route path="/profile" element={<ProfileContainer />}>
            <Route path=":userId" element={<ProfileContainer />} />
          </Route>


    это 100% работает но не самый лучший способ и нужно делать по-другому но я решаю частную задачу - нужно доделать работу в парадигме IT React Kamasutra версии 2019 года
    Ответ написан
    2 комментария