#javascript #alpine.js
Вопрос:
Я работаю с Alpine.data
глобальным и хочу объединить массивы, когда loadJobs
сработает мой метод. Я не знаком с прокси в JS, и я действительно не понимаю, почему мое data
свойство возвращает прокси-объект вместо простого массива.
Вот фрагмент кода, с которым я работаю :
jobState = {
low: 5,
high: 10,
isLoaded: false
}
document.addEventListener("alpine:init", () => {
Alpine.data("loadMoreJobs", () => ({
data: [],
loadJobs() {
// Update jobState
jobState.low = jobState.high
jobState.high = 5
const requestParams = {
dataType: 'json',
method: 'GET'
}
fetch(`http://127.0.0.1:3000/jobs/list/${jobState.low}/${jobState.high}`, requestParams)
.then((data) => {
return data.json()
})
.then((data) => {
this.data = [...this.data, data]
})
}
}))
})
Комментарии:
1. Не думаю, что ты когда-нибудь докопаешься до сути этого? В данный момент я сам с этим борюсь!!
2. Я нашел обходной путь с помощью какого-то довольно грязного трюка, но он работает :
// I have the data variable containing JSON back from the API call this.data = JSON.parse(JSON.stringify(this.data)); data = JSON.parse(JSON.stringify(data)); this.data = this.data.concat(data);
3. Я изначально спросил, потому что, похоже, ваша проблема была связана с моей. После более тщательного расследования я не думаю, что это так. Тот факт, что данные (ваш массив) заключены в a
Proxy()
, ни в малейшей степени не имеет значения-вы все равно можете рассматривать их как массив. Если вы не можете, то, вероятно, в коде есть более фундаментальная проблема (усугубляемая тем фактом, что вы используете имяdata
как в качестве аргумента, так и в качестве переменной класса!!). Я также обнаружил во время своих путешествий, чтоparse(stringify(data))
решение-это просто способ замазать трещины бумагой. Скорее всего, в вашем коде есть более фундаментальная ошибка.4. Спасибо за ваш ответ, я читал, что это действительно не должно было иметь значения. Я изменил имена переменных, чтобы прояснить это в примере, но в моем коде они так не называются, поэтому я предполагаю, что где-то есть еще одна ошибка, на которую вы указываете. Может быть, вам следует добавить свой комментарий в качестве ответа на мой вопрос, чтобы я мог его принять ?