У меня есть этот тест relay-starter-kit проект с формой автозаполнения, которая отображает кавычки в браузере. Когда я использую форму поиска, я получаю сообщение об ошибке в браузере: «app.js: 8284 Uncaught TypeError: Невозможно прочитать« ребра »свойств неопределенного». Я не могу понять, почему он заполняет поля поиска в первый раз, но не набирает форму поиска. Следует отметить, что если вы жестко скопируете переменную searchTerm, она отобразит результаты поиска. Другими словами, он может читать края, когда он жестко закодирован. Любое руководство по этому вопросу было бы здорово. Благодарю.Ошибка реле/Mongodb - Невозможно прочитать свойство неопределенного
Схема here Это тот компонент, который действительный запрос graphql для поискового запроса не будет отображаться.
import React from 'react';
import Relay from 'react-relay';
import { debounce } from 'lodash';
import SearchForm from '../search-form';
import Quote from '../quote';
class App extends React.Component {
constructor(props) {
super(props)
this.search = debounce(this.search.bind(this), 300)
}
search(searchTerm) {
this.props.relay.setVariables({ searchTerm });
}
render() {
return (
<div className="quotes-library">
<SearchForm searchAction={this.search} />
<div className="quotes-list">
{this.props.viewer.quotes.edges.map(edge =>
<Quote key={edge.node.id} quote={edge.node} />
)}
</div>
</div>
)
}
}
export default Relay.createContainer(App, {
initialVariables: {
searchTerm: '',
},
fragments: {
viewer:() => Relay.QL`
fragment on User {
quotes(first:100, searchTerm: $searchTerm) {
edges {
node {
id
${Quote.getFragment('quote')}
}
}
}
}
`,
},
});
Обновление: это запрос, как показано на вкладке сети Chrome DevTools. Обратите внимание, что запрос «p» в форму поиска запрашивается.
query App_ViewerRelayQL($id_0:ID!) {
node(id:$id_0) {
...F2
}
}
fragment F0 on Quote {
id,
likesCount
}
fragment F1 on Quote {
text,
author,
id,
...F0
}
fragment F2 on User {
_quotes3UfnML:quotes(first:100,searchTerm:"pri") {
edges {
node {
id,
...F1
},
cursor
},
pageInfo {
hasNextPage,
hasPreviousPage
}
},
id
}
Добавление console.log для визуализации() показывает вход SEARCHTERM:
app.js:17
{
"viewer": {
"__dataID__": "VXNlcjox",
"__status__": 4
},
"relay": {
"pendingVariables": null,
"route": {
"name": "AppHomeRoute",
"params": {},
"queries": {}
},
"variables": {
"searchTerm": "pri"
}
}
}
Следующая ошибка возникает в строке 24 в app.js, который {this.props.library.quotes.edges.map(edge => <Quote key={edge.node.id} quote={edge.node} /> )}
:
app.js:8285 Uncaught TypeError: Cannot read property 'edges' of undefined
at App.render (app.js:8285)
at app.js:43197
at measureLifeCyclePerf (app.js:42476)
at ReactCompositeComponentWrapper._renderValidatedComponentWithoutOwnerOrContext (app.js:43196)
at ReactCompositeComponentWrapper._renderValidatedComponent (app.js:43223)
at ReactCompositeComponentWrapper._updateRenderedComponent (app.js:43147)
at ReactCompositeComponentWrapper._performComponentUpdate (app.js:43125)
at ReactCompositeComponentWrapper.updateComponent (app.js:43046)
at ReactCompositeComponentWrapper.receiveComponent (app.js:42948)
at Object.receiveComponent (app.js:35341)
ОБНОВЛЕНИЕ 2:
Итак, проверьте это. Я делаю что-то не так с моим {ObjectID}. Я вытащил пользователя и сделал цитату из db, и на объекте есть свойство «_id», но не «id». Это выход:
> db.users.find({})
{ "_id" : ObjectId("586253169465191cb812066c"), "name" : "me", "id" : ObjectId("586253169465191cb812066c"), "errors" : [ ] }
> db.quotes.find({})
{ "_id" : ObjectId("586693333ff93f3581c0ca05"), "text" : "Hi Prisc", "author" : "H. Jackson Brown", "likesCount" : 24 }
{ "_id" : ObjectId("586693333ff93f3581c0ca06"), "text" : "If opportunity doesn't knock, build a door", "author" : "Milton Berle", "likesCount" : 2 }
{ "_id" : ObjectId("586693333ff93f3581c0ca07"), "text" : "Try to be a rainbow in...", "author" : "Maya Angelou" }
Если я вхожу идентификатор из globalIdFetcher(), вошедший идентификатор для Джексон Браун Цитаты объекта показать два идентификаторы, как и ожидался, но они оба одинаковы и отличаются от того, в дб. Выход на консоли:
{
"viewer": {
"__dataID__": "VXNlcjo=",
"quotes": {
"__dataID__": "client:6068631311_first(100),searchTerm()",
"edges": [
{
"__dataID__": "client:client:6068631311:UXVvdGU6NTg2NjkzMzMzZmY5M2YzNTgxYzBjYTA1",
"node": {
"__dataID__": "UXVvdGU6NTg2NjkzMzMzZmY5M2YzNTgxYzBjYTA1",
"id": "UXVvdGU6NTg2NjkzMzMzZmY5M2YzNTgxYzBjYTA1",
"__fragments__": {
"1::client": [
{
"showLikes": false
}
]
}
}
},
Есть идеи по исправлению этого синтаксиса?
Очень полезный комментарий относительно обмена отладочным процессом. Благодарю. За сообщение запрос работал и возвращался, а параметры поиска просто не возвращались обратно. По вашему предложению добавлен лог-вызов render(). Я обновил исходный вопрос с помощью результата вызова журнала, сетевого запроса и ошибки. Что-нибудь выделяется вам? Кстати, (или нет) эта работа, если я изменил корневой запрос на const с типом, который просто разрешает список. Добавление разрешения зрителя в поле User QoutesConnectionType - это то место, где я потерял свой путь. – idkjs
Каков ответ запроса, который вы получаете на вкладке сети Chrome DevTools? –
В OP, в UPDATE. [статус 200] (https://gist.github.com/idkjs/f7aafdd575f093e8bf421d84a3de08b1) – idkjs