mam składnik profilu, który jest ładowany przez reagują routerem (ścieżka = „profil /: nazwę użytkownika”), a składnikiem sama wygląda następująco:nieskończonej pętli podczas produkcji w componentWillReceiveProps
...
import { fetchUser } from '../actions/user';
class Profile extends Component {
constructor(props) {
super(props);
}
componentDidMount() {
const { username } = this.props;
this.fetchUser(username);
}
componentWillReceiveProps(nextProps) {
const { username } = nextProps.params;
this.fetchUser(username);
}
fetchUser(username) {
const { dispatch } = this.props;
dispatch(fetchUser(username));
}
render() {...}
}
export default connect((state, ownProps) => {
return {
username: ownProps.params.username,
isAuthenticated: state.auth.isAuthenticated
};
})(Profile);
i działania fetchUser wygląda następująco (Redux-API-middleware):
function fetchUser(id) {
let token = localStorage.getItem('jwt');
return {
[CALL_API]: {
endpoint: `http://localhost:3000/api/users/${id}`,
method: 'GET',
headers: { 'x-access-token': token },
types: [FETCH_USER_REQUEST, FETCH_USER_SUCCESS, FETCH_USER_FAILURE]
}
}
}
powodem dodałem funkcję componentWillReceiveProps ma reagować, gdy zmienia URL do drugiego: login i załadować że profil użytkownika informacji. Na pierwszy rzut oka wszystko wydaje się działać, ale potem zauważyłem podczas debugowania, że funkcja componentWillReceiveProps jest wywoływana w nieskończonej pętli i nie wiem dlaczego. Jeśli usunę składnik componentWillReceiveProps, to profil nie zostanie zaktualizowany przy użyciu nowej nazwy użytkownika, ale nie mam problemu z pętlami. Jakieś pomysły?
Teraz rozumiem. Reduktor dla FETCH_USER_SUCCESS przechowywał dane użytkownika som, z którymi łączył się mój komponent Profile (o których zapomniałem dodać do powyższego kodu podczas pisania pytania). Tak więc przepływ był componentWillReceiveProps -> dispatcher -> dane aktualizacji reduktora, z którym Profil łączy się -> componentWillReceiveProps jest wywoływany ponownie i wszystko zaczyna się od nowa. Myślę, że będę musiał przenieść kod zmiany trasy gdzie indziej, aby uniknąć tej pętli. Dzięki! – hazmah0