Я работаю над проектом Preact-CLI с Preact-Router, и он отлично работает на локальном хосте. Но производство не работает хорошо после сборки.
Я создал одностраничный объект, который динамически получает свое содержимое из файла JSON (внутри проекта, а не снаружи). Итак, я загрузил один и тот же объект страницы 2 раза для каждой отдельной страницы.
Я получаю URL страницы (используя this.props.permalink) и сравниваю его с JSONObject.title. Если они одинаковые, я хочу получить соответствующий контент JSON для отображения на странице исправления. Работает как очарование на localhost, но не в производстве.
Выпуск:
Каким-то образом все страницы получают содержимое первого элемента JSON. Сначала я подумал, что это проблема с сервером, но я ошибся. Скомпилированные файлы неверны после предварительной визуализации / сборки. Таким образом, предварительно обработанный HTML-код страницы B содержит содержимое предварительно отображенной страницы A.
Я предполагаю, что во время сборки this.props.permalink не работает. Как мне справиться с этим?
Дополнительная информация:
Я использую функцию prerender, но не работника сервиса для сборки.
Спасибо!
UPDATE:
Я переписал функцию. Я догадался, что мне нужно установить динамический контент с помощью цикла, чтобы во время сборки компилятор проходил по нему и мог предварительно обработать все страницы.
Итерация и установка состояния работают, , но сохраняется только последний элемент массива PrerenderUrls. Так что теперь все страницы получают содержимое JSON первого элемента.
componentWillMount() {
for (var i = 0; i <= PrerenderUrls.length; i++) {
// the code you're looking for
let removeDash = new RegExp("-")
var needle = PrerenderUrls[i].title
var needle1 = needle.replace(removeDash, " ")
alert("1")
// iterate over each element in the array
if (needle1 != "Homepage") {
for (var x = 0; x < Data.length; x++) {
// look for the entry with a matching `code` value
let removeDash = new RegExp("-")
var nodash = Data[x].title.replace(removeDash, " ")
var nocaps = nodash.toLowerCase()
if (nocaps == needle1) {
alert("needle2: "+ needle1 + " nocaps: " + nocaps)
//alert("data "+ Data[x].title)
this.setState({
pageTitle: Data[x].title,
descShort: Data[x].descShort,
description: Data[x].desc,
img: Data[x].img
})
alert("state "+ this.state.pageTitle)
}
}
}
}