2016-12-13 5 views
0

Я использую scala.js и japgolly реакцию библиотеки.Scala.js + React: «sbt run» показывает «Контейнер цели не является элементом DOM»

Я видел много потоков о той же самой проблеме, вызванной наличием сценариев не в конце части тела, или неправильным написанием имени идентификатора элемента. Но мой HTML отлично, и он отлично отображает. Оно работает.

Но я также хотел использовать: sbt run ... для тестирования. Основываясь на передовой практике (шаг 6) базового уровня scala.js tutorial. К сожалению, в отличие от реальной страницы, то SBT запустить возвращается:

[error]  throw error; 
[error] ^
[error] Invariant Violation: _registerComponent(...): Target container is not a DOM element. 

Речь идет простой ReactDOM:

ReactDOM.render(<.div("foo"), document.getElementById("fooid")) 

Не уверен, что мне нужно, но я RuntimeDOM в моих jsDependencies. И я также установил через npm jsdom. Надеюсь, это не проблема.

Любая идея, что мне нужно сделать sbt run работает также? Спасибо

+0

Я не понимаю, почему вы хотите использовать 'sbt run' с проектом Scala.js. Вы можете объяснить, пожалуйста? Для меня проект Scala.js в основном предназначен для создания библиотеки JavaScript, которая запускается в браузере. – Yawar

+0

Следуя рекомендациям scala.js, это предназначено для целей тестирования. Как объясняется в базовом учебном пособии scala.js. http://www.scala-js.org/tutorial/basic/ ... step 6 – TalBeno

ответ

1

Ошибка реактивного метания, потому что в вашей тестовой среде нет элемента с идентификатором fooid.

val fooDiv = dom.document.createElement("div") 

fooDiv.id = "fooid" 

dom.document.body.appendChild(fooDiv) 
+0

Спасибо @invariant. Это могло быть причиной, но, как уже упоминалось, мой html работает. Идентификатор существует, и мое приложение отображается хорошо. Задача только с запуском sbt. См. Шаг 6 основного учебника для аналогичного сценария: http://www.scala-js.org/tutorial/basic/ ... здесь, хотя ReactDom.render не распознается. – TalBeno

+0

В 'sbt run' ваш HTML-файл не используется. Вы должны создать критические части, используя код, как показал @инвариант. – sjrd

+0

Я вижу. Спасибо! – TalBeno