Я пытаюсь найти сложную ошибку, с которой я столкнулся с реагирующим маршрутизатором. По какой-то причине установка состояния одного из моих дочерних компонентов в маршруте страницы верхнего уровня вызывает следующее сообщение об ошибке:React-Router бросает инвариантное нарушение на setState() в ajax-вызове
Uncaught Error: Invariant Violation: Missing "userId" parameter for path "/user/:userId"
Эта ошибка происходит независимо от того, я ли я или нет навигации по этому пути. Мои маршруты выглядеть так:
var routes = (
<Routes>
<DefaultRoute handler={LoginPage} />
<Route name="login" handler={LoginPage} />
<Route name="home" handler={HomePage} />
<Route name="category" path="/category/:category" handler={CategoriesPage}/>
<Route name="profile" path="/user/:userId" handler={ProfilePage}/>
</Routes>
);
И мой Аякса вызов выглядит следующим образом:
var Feed = React.createClass({
getInitialState: function() {
return { feedItems: [] };
},
componentDidMount: function() {
$.ajax({
url: '/api/transactions',
dataType: 'json',
success: function(transactions) {
this.setState({ feedItems: transactions });
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
},
....
Этот поток генерируется на кучу страниц, в том числе HomePage и ProfilePage. У меня много проблем с выяснением того, как: параметр userId может быть связан с вызовом Ajax в фиде, но это то, куда ведет меня трассировка стека. Любая помощь в том, что здесь происходит, будет высоко оценена.
ОБНОВЛЕНИЕ: Нашла проблему. Моя база данных монго была устаревшей (были изменены схемы моделей), что вызывало множество проблем, пузырящихся до этого инвариантного нарушения. Я все еще не совсем уверен, как эти два были связаны, но удаление старых объектов устранило проблему.
Вы используете [Navigation mixin] (https://github.com/rackt/react-router/blob/master/docs/api/mixins/Navigation.md) где угодно? – FakeRainBrigand
Является ли компонент неподвижным/уже установленным, когда вызывается «успешный» обратный вызов? – phtrivier
Можете ли вы уточнить, что было не так, и что вы исправили? Я тоже сталкиваюсь с этим. – cdbitesky