#reactjs #wordpress #graphql
Вопрос:
Я создаю сайт с помощью Гэтсби и получаю данные из WordPress.
Я терпеть не Node
могу этого черта, поэтому я хотел очистить данные. Проблема возникает при повторном посещении страницы (без обновления браузера), теперь она выдает ошибку, которая Node
не определена.
Честно говоря, документы Гэтсби-это беспорядок, поэтому я до сих пор понятия не имею, как работает часть graphql.
Запрос в index
файле:
export const query = graphql`
query {
allWpMasina(limit: 6) {
nodes {
id
atrumkarbas {
nodes {
name
}
}
}
}
}
`;
У всех автомобилей есть только один «атрумкарбас», поэтому я просто хотел присвоить ему имя, не записывая atrumkarbas.node[0].name
его каждый раз, когда я хочу получить к нему доступ.
Поэтому на странице индекса я добавил следующее:
const IndexPage = ({ data: { allWpMasina } }) => {
let cars = allWpMasina.nodes;
cars.forEach((car) => {
car.atrumkarbas = car.atrumkarbas.nodes[0].name;
Как вы можете видеть, он избавился от этого .nodes[0].name
, и все это отлично работает.
Но когда я снова перехожу на эту страницу:
Cannot read properties of undefined (reading '0')
Я попытался добавить let cars = allWpMasina.nodes.map()
, чтобы он копировал его каждый раз, не изменяя data.allWpMasina
, но каким-то образом он все равно кэширует их обоих и портит повторный визит.
Ведение журнала консоли до внесения изменений выводит уже отформатированный результат! Если я удалю forEach
его, он вернется к узлу узла узла, но когда я снова его добавлю, allWpMasina
он будет таким же, как cars
и до forEach
того, как он будет выполнен!
Как Гэтсби обрабатывает данные Graphql? Как я могу скопировать и изменить его, не затрагивая исходные данные?
Комментарии:
1. исправьте это в источнике проблемы … просто определите поле (одно значение) CPT, а не отношение (массив)
2. @xadm, Но нам нужно заранее определить параметры, и, сделав его нереляционным, мы каждый раз будем делать его уникальным. Я также использую ACF, так что, может быть, просто лучше запросить все через него? Даже таксономии?
3. много [сообщений/cpt] к одному [значению] вместо многих [сообщений/cpt] ко многим [значениям] — все еще связь, опция «выбрать один»