Если вам нужны переменные, специфичные для маршрута, то, вероятно, проще всего (и рекомендуется) использовать параметры маршрута для инициализации состояния и повторного выполнения действий.
Если вы используете компоненты на основе классов, loadUser(userId)
должно быть в componentDidMount
и componentDidUpdate
.
Для функциональных компонентов вместо этого есть React hook useEffect () (который, кажется,стать лучшей / лучшей практикой в эти дни).
Например:
Если вы используете response-router-dom в вашем файле rout.js / app.js, у вас будет маршрут, такой как:
<Route path='/some/path/:userid' component={someComponent}/>
Затем используйте props.match.params и используйте useEffect с идентификатором пользователя в качестве зависимости:
import React , {useEffect} from 'react'
import {connect} from 'react-redux'
import * as actions from 'path/to/redux/actions'
// destructure `match.params.userid`, redux `user` and redux action `loadUser` from props
const someComponent = ({ match:{params:{userid}} , user , loadUser}) => {
useEffect(()=>{
userid && loadUser(userid)
},[loadUser , userid]) // runs after first mount and every time userid changes
return <div>{user && user.id}</div>
}
connect(
({user})=>({user}),
actions
)(someComponent)