В функции рендеринга моего компонента у меня есть:
render() {
const items = ['EN', 'IT', 'FR', 'GR', 'RU'].map((item) => {
return (<li onClick={this.onItemClick.bind(this, item)} key={item}>{item}</li>);
});
return (
<div>
...
<ul>
{items}
</ul>
...
</div>
);
}
все отрисовывается нормально, однако при нажатии на <li>
элемент я получаю следующую ошибку:
Uncaught Ошибка: Инвариантное Нарушение: Объекты недопустимы как дочерний элемент React (найдено: объект с ключами {dispatchConfig, dispatchMarker, nativeEvent, цель, currentTarget, тип, eventPhase, пузырьки, отменяемый, timeStamp, defaultPrevented, isTrusted, просмотр, детализация, screenX) , screenY, clientX, clientY, ctrlKey, shiftKey, altKey, metaKey, getModifierState, кнопка, кнопки, relatedTarget, pageX, pageY, isDefaultPrevented, isPropagationStopped, _dispatchListeners, _dispatchIDs}). Если вы намеревались визуализировать коллекцию дочерних элементов, используйте вместо этого массив или оберните объект с помощью createFragment (object) из дополнений React. Проверьте метод визуализации
Welcome
.
Если я изменяю , this.onItemClick.bind(this, item)
чтобы (e) => onItemClick(e, item)
внутри функции карты все работает , как ожидалось.
Если бы кто-то мог объяснить, что я делаю неправильно, и объяснить, почему я получаю эту ошибку, было бы здорово
ОБНОВЛЕНИЕ 1:
функция onItemClick выглядит следующим образом, и удаление this.setState приводит к исчезновению ошибки.
onItemClick(e, item) {
this.setState({
lang: item,
});
}
Но я не могу удалить эту строку, так как мне нужно обновить состояние этого компонента
источник
this.onItemClick
это реализовано?Ответы:
У меня была эта ошибка, и оказалось, что я непреднамеренно включил объект в мой код JSX, который, как я ожидал, будет строковым значением:
breadcrumbElement
раньше была строкой, но из-за рефакторинга стала объектом. К сожалению, сообщение об ошибке React не помогло мне указать на строку, где существовала проблема. Мне приходилось следить за трассировкой стека до тех пор, пока я не распознал «реквизиты», передаваемые в компонент, а затем не нашел код, вызывающий нарушение.Вам нужно будет либо сослаться на свойство объекта, которое является строковым значением, либо преобразовать объект в желаемое строковое представление. Один из вариантов может быть,
JSON.stringify
если вы действительно хотите увидеть содержимое объекта.источник
Так что я получил эту ошибку при попытке отобразить
createdAt
свойство, которое является объектом Date. Если вы соедините.toString()
конец таким образом, он выполнит преобразование и устранит ошибку. Просто разместите это как возможный ответ на тот случай, если кто-то столкнется с такой же проблемой:источник
objects are not valid
инвариантное нарушение, только когда я добавлю строку. Оказывается, я преобразовывал объект Date () в строку перед тем, как сохранить ее, поэтому только мои новые строки имели объекты для созданной даты. :( Учитесь на своём своенравном примере людей!Я только что получил ту же ошибку, но из-за другой ошибки: я использовал двойные скобки, такие как:
вставить значение
count
вместо правильного:в который предположительно превратился компилятор
{{count: count}}
, то есть пытается вставить объект как дочерний элемент React.источник
{}
. Внутренняя пара рассматривается как код ES6. В ES6 так{count}
же, как{count: count}
. Поэтому, когда вы печатаете{{count}}
, это точно так же, как{ {count: count} }
.this.state = {navMenuItems: {navMenu}};
... который в основном превратил мой JSXnavMenu
в универсальный объект. Изменение, чтобыthis.state = {navMenuItems: navMenu};
избавиться от непреднамеренного «приведения»Object
и исправить проблему.Просто подумал, что я добавлю к этому, поскольку у меня была та же проблема сегодня, оказалось, что это потому, что я возвращал только функцию, когда я обернул ее в
<div>
тег, он начал работать, как показано нижеВышеуказанное вызвало ошибку. Я исправил проблему, изменив
return()
раздел на:... или просто:
источник
return gallerySection
если хотите избежать лишнихdiv
gallerySection
вместо того, чтобы<div>{gallerySection}</div>
помочь мне.React child (единственное число) должен быть типом примитивного типа данных, а не объектом, или это может быть тег JSX (что не в нашем случае) . Используйте пакет Proptypes в разработке, чтобы убедиться, что проверка происходит.
Просто быстрое сравнение кода (JSX), чтобы представить вас с идеей:
Ошибка: при передаче объекта в дочерний элемент
Без ошибок: со свойством объекта ( которое должно быть примитивным, то есть строковым или целочисленным ), передаваемым в child.
TLDR; (Из источника ниже): Убедитесь, что все элементы, которые вы отображаете в JSX, являются примитивами, а не объектами при использовании React. Эта ошибка обычно возникает из-за того, что функции, участвующей в отправке события, был присвоен неожиданный тип объекта (т.е. передается объект, когда вы должны передавать строку), или часть JSX в вашем компоненте не ссылается на примитив (то есть this.props). против this.props.name).
Источник - codingbismuth.com
источник
return <p>{item.whatever}</p>;
Моя была связана с ненужной наложением фигурных скобок на переменную, содержащую элемент HTML, внутри оператора return функции render (). Это заставило React рассматривать его как объект, а не как элемент.
Как только я удалил фигурные скобки из элемента, ошибка исчезла, и элемент был отображен правильно.
источник
Моя была связана с тем, что забыла о фигурных скобках вокруг реквизита, отправляемых в презентационный компонент:
Перед:
После
источник
Я тоже получал эту ошибку «Объекты недопустимы как дочерний элемент React», и для меня причина была вызвана асинхронной функцией в моем JSX. Увидеть ниже.
Я узнал, что асинхронный рендеринг не поддерживается в React. Команда React работает над решением, описанным здесь .
источник
Для любого, кто использует Firebase с Android, это только ломает Android. Моя эмуляция iOS игнорирует это.
И как написал Апурв Банки выше.
Все, что выше Firebase V5.0.3, для Android, atm - это провал. Fix:
Подтверждено много раз здесь https://github.com/firebase/firebase-js-sdk/issues/871
источник
У меня тоже есть такая же проблема, но моя ошибка такая глупая. Я пытался получить доступ к объекту напрямую.
источник
Если по какой-то причине вы импортировали FireBase. Тогда попробуйте запустить
npm i --save firebase@5.0.3
. Это потому, что firebase break реагирует на «родной», поэтому запуск этого исправит это.источник
В моем случае я забыл вернуть элемент html из функции рендеринга, и я возвращал объект. Я просто обернул {items} элементом html - простым div, как показано ниже
источник
У меня была та же проблема, потому что я не вставил
props
фигурные скобки.Так что, если ваш код похож на приведенный выше, вы получите эту ошибку. Чтобы решить эту проблему просто поставьте фигурные скобки по всему
props
.источник
Я получил ту же ошибку, я изменил это
export default withAlert(Alerts)
к этому
export default withAlert()(Alerts)
,В более старых версиях прежний код был в порядке, но в более поздних версиях он выдает ошибку. Так что используйте более поздний код, чтобы избежать ошибки.
источник
В моем случае ошибка происходила потому, что я возвращал массив элементов в фигурных скобках вместо того, чтобы просто возвращать сам массив.
Код с ошибкой
Правильный код
источник
Вы просто использовали ключи объекта, а не весь объект!
Более подробную информацию можно найти здесь: https://github.com/gildata/RAIO/issues/48
источник
У меня та же проблема, в моем случае, я обновляю состояние избыточности , и новые параметры данных не совпадают со старыми параметрами, поэтому, когда я хочу получить доступ к некоторым параметрам через эту ошибку,
Может быть, этот опыт поможет кому-то
источник
Если вы используете Firebase и видите эту ошибку, стоит проверить, правильно ли вы ее импортируете. Начиная с версии 5.0.4, вы должны импортировать его так:
Да, я знаю. Я тоже потерял 45 минут.
источник
Обычно это всплывает, потому что вы не разрушаете должным образом. Возьмите этот код для примера:
Мы объявляем это с помощью
= text =>
параметра. Но на самом деле, React ожидает, что это будет всеобъемлющийprops
объект.Таким образом, мы действительно должны делать что-то вроде этого:
Заметили разницу? Параметр
props
здесь может быть назван как угодно (props
это просто соглашение, соответствующее номенклатуре), React просто ожидает объект с ключами и значениями.С разрушением объекта вы можете сделать, и часто будете видеть, что-то вроде этого:
... который работает.
Скорее всего, любой, кто наткнулся на это, просто случайно объявил реквизит реквизита своего компонента без разрушения.
источник
Я просто изложил себе действительно глупую версию этой ошибки, которой я также могу поделиться здесь для потомков.
У меня был такой JSX, как этот:
Мне нужно было это закомментировать, чтобы что-то отладить. Я использовал сочетание клавиш в моей IDE, что привело к следующему:
Что, конечно, недействительно - объекты недействительны как реагирующие дети!
источник
Я хотел бы добавить другое решение в этот список.
Технические характеристики:
Я столкнулся с той же ошибкой:
Это был мой код:
Решение:
Проблема возникла из-за того, что полезная нагрузка отправляла элемент как объект. Когда я удалил переменную полезной нагрузки и поместил значение userInput в диспетчеризацию, все начало работать как положено.
источник
В случае, если вы используете Firebase любой из файлов в вашем проекте. Тогда просто поместите этот оператор importbase в конце !!
Я знаю, это звучит безумно, но попробуй !!
источник
Моя проблема была проста, когда я столкнулся со следующей ошибкой:
просто я передавал объект с ключами, указанными в ошибке, при попытке визуализации объекта непосредственно в компоненте, используя {объект}, ожидая, что он будет строкой
при рендеринге на React Component я использовал что-то вроде ниже
но это должно было быть
источник
При использовании компонентов без сохранения состояния следуйте следующему формату:
Казалось, это работает для меня
источник
Нечто подобное только что случилось со мной ...
Я написал:
Поместив его в div исправил это:
источник
Что означает, что вы передаете что-то является ключевым значением. Так что вам нужно изменить ваш обработчик:
из вВы пропустили скобки (
{}
).источник
В моем случае я добавил асинхронный компонент к своему дочернему компоненту функции и столкнулся с этой ошибкой. Не используйте async с дочерним компонентом.
источник
В случае использования Firebase, если он не работает, помещая в конце
import
операторы, вы можете попытаться вставить это в один из методов жизненного цикла, то есть вы можете поместить его внутрьcomponentWillMount()
.источник
Invariant Violation: Objects are not valid as a React child
случилось со мной при использовании компонента, который нуждался вrenderItem
реквизите, например:и моя ошибка заключалась в том, чтобы сделать мой
renderItem
методasync
.источник
Моя ошибка была из-за того, что я написал это так:
вместо того:
Это означало, что я пытался визуализировать объект вместо значения внутри него.
редактировать: это для реагировать не родной.
источник