Skip to main content

Устранение неполадок

Канал #redux в Discord сообщества Reactiflux является нашим официальным ресурсом по всем вопросам, связанным с обучением и использованием Redux. Reactiflux - отличное место, чтобы пообщаться, задать вопросы и обучаться - присоединяйтесь к нам!

Вы также можете задать вопросы на Stack Overflow, используя тег #redux.

Мои компоненты не обновляются!

Вкратце:

  • Редюсеры(Reducers) никогда не должны изменять состояние, они должны возвращать новые объекты, иначе React Redux не увидит изменений.
  • Убедитесь, что вы действительно отправляете действия. Например, если у вас есть создатель действия, такой как addTodo, простой вызов импортированной функции addTodo() сам по себе ничего не обновит, потому что эта функция просто возвращает действие, но не отправляет его. Вам нужно либо вызвать dispatch(addTodo()) (если вы используете API хуков), либо props.addTodo() (при использовании connect + mapDispatch).

Не удалось найти "контейнер" ни в контексте, ни в пропсах (Could not find "store" in either the context or props)

Если у вас есть проблемы с контекстом,

  1. Убедитесь, что на странице нет дубликата экземпляра React.
  2. Убедитесь, что в вашем проекте нет нескольких экземпляров/копий React Redux.
  3. Убедитесь, что вы не забыли обернуть свой корневой компонент или какой-либо другой компонент-предок в <Provider>.
  4. Убедитесь, что вы используете последние версии React и React Redux.

Инвариантное нарушение: addComponentAsRefTo(...): только ReactOwner может иметь ссылки. Чаще всего это означает, что вы пытаетесь добавить ссылку на компонент, который не имеет владельца (Invariant Violation: addComponentAsRefTo(...): Only a ReactOwner can have refs. This usually means that you’re trying to add a ref to a component that doesn’t have an owner)

Если вы используете React для web, это обычно означает, что у вас есть дубликат React. Следуйте приложенным инструкциям для исправления этого.

Я получаю предупреждение о useLayoutEffect в своих юнит-тестах.

ReactDOM выдает это предупреждение, если useLayoutEffect используется "на сервере". React Redux пытается обойти проблему, определяя, работает ли он в контексте браузера. Jest, по умолчанию, определяет достаточную ему среду браузера, чтобы React Redux считал, что он запущен в браузере, вызывая эти предупреждения.

Вы можете предотвратить появление этого предупреждения, установив @jest-environment для одного тестового файла:

// my.test.jsx
/**
* @jest-environment node
*/

Или установив его глобально:

// package.json
{
"name": "my-project",
"jest": {
"testEnvironment": "node"
}
}

Смотрите https://github.com/facebook/react/issues/14927#issuecomment-490426131